0Pricing
PHP Academy · บทเรียน

Fibers: การทำงานพร้อมกันแบบร่วมมือกัน

หยุดชั่วคราวและทำงาน PHP ต่อด้วย Fibers เพื่อสร้างรูปแบบการทำงานคล้ายอะซิงก์

Fibers: การทำงานพร้อมกันแบบร่วมมือกัน เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

Fiber คืออะไร

PHP 8.1 เปิดตัว Fiber ซึ่งเป็นโคโรทีนน้ำหนักเบาที่สามารถหยุดการทำงานชั่วคราว ณ จุดหนึ่งและกลับมาทำงานต่อภายหลังได้ ทำให้รองรับการทำงานหลายอย่างพร้อมกันแบบร่วมมือกัน

Fiber กับอะซิงโครนัส

Fiber ไม่ใช่เธรดที่ทำงานขนานกัน PHP ยังคงทำงานแบบเธรดเดียว Fiber ช่วยให้บริบทการทำงานหนึ่งสละการควบคุมให้บริบทอื่นโดยสมัครใจ ทำให้สร้างรูปแบบการทำงานที่คล้ายอะซิงโครนัสได้

การสร้าง Fiber

สร้างไฟเบอร์โดยส่งฟังก์ชันที่เรียกใช้งานได้ให้กับตัวสร้างของไฟเบอร์ ไฟเบอร์จะยังไม่เริ่มทำงานจนกว่าจะเรียก start()

<?php
$fiber = new Fiber(function (): void {
    echo "Fiber started\n";
    $value = Fiber::suspend("first suspension");
    echo "Resumed with: $value\n";
});

การเริ่มต้นและระงับการทำงาน

start() จะทำงานกับไฟเบอร์จนกว่าจะพบ Fiber::suspend() ครั้งแรก ค่าที่ส่งให้ suspend() จะถูกส่งกลับจาก start()

<?php
$suspended = $fiber->start(); // runs until suspend()
echo $suspended; // "first suspension"

การทำงานต่อของไฟเบอร์

resume($value) จะทำให้ไฟเบอร์ทำงานต่อจากจุดที่ถูกระงับ ค่า ที่ส่งให้ resume() จะถูกส่งกลับโดย Fiber::suspend() ภายในไฟเบอร์

<?php
$fiber->resume("hello from main");
// Inside fiber: $value = "hello from main"
// Prints: "Resumed with: hello from main"

ตัวอย่างไฟเบอร์แบบสมบูรณ์

วงจรการทำงานของไฟเบอร์ทั้งหมด ได้แก่ สร้าง เริ่มต้น ระงับการทำงาน ทำงานต่อ และสิ้นสุด

<?php
$fiber = new Fiber(function (): string {
    $x = Fiber::suspend("paused");
    return "Fiber done, received: $x";
});

$msg = $fiber->start();   // "paused"
$fiber->resume("hi!");
echo $fiber->getReturn(); // "Fiber done, received: hi!"

เมธอดตรวจสอบสถานะไฟเบอร์

ตรวจสอบสถานะของไฟเบอร์ด้วย isStarted(), isSuspended(), isRunning(), isTerminated()

<?php
var_dump($fiber->isTerminated()); // true after getReturn()

การจัดการข้อผิดพลาดในไฟเบอร์

โยนข้อยกเว้นเข้าไปในไฟเบอร์ด้วย $fiber->throw(new Exception(...)) ข้อยกเว้นจะปรากฏที่จุด Fiber::suspend() ภายในไฟเบอร์

การทำงานร่วมกับลูปเหตุการณ์

ไฟเบอร์ออกแบบมาเพื่อขับเคลื่อนลูปเหตุการณ์ (ReactPHP, Revolt) โดยฟังก์ชันเรียกกลับสำหรับการรับส่งข้อมูลจะระงับการทำงานระหว่างรอ และทำงานต่อเมื่อมีข้อมูลมาถึง

ไฟเบอร์เทียบกับตัวสร้าง

ตัวสร้าง (PHP 5.5 ขึ้นไป) ก็หยุดชั่วคราวได้ด้วย yield แต่มีจุดประสงค์หลักเพื่อการวนซ้ำแบบประเมินค่าเมื่อจำเป็น ส่วนไฟเบอร์เป็นกลไกโครูทีนที่ใช้งานได้ทั่วไปมากกว่า โดยรองรับการส่งค่าทั้งไปและกลับ รวมถึงการคืนค่า

กรณีการใช้งานจริง

ไฟเบอร์ช่วยขับเคลื่อนสิ่งต่อไปนี้: ไคลเอ็นต์ HTTP แบบไม่บล็อกใน Revolt การสืบค้นฐานข้อมูลแบบอะซิงโครนัส ตัวจัดตารางงานแบบร่วมมือกัน และกระบวนการส่งข้อมูลแบบสตรีมมิงโดยไม่เพิ่มความซับซ้อนจากการใช้หลายเธรด

สรุป

ไฟเบอร์ช่วยให้บริบทการทำงานของ PHP หนึ่งบริบทหยุดชั่วคราวและทำงานต่อได้ จึงทำให้เกิดการทำงานพร้อมกันแบบร่วมมือกัน ไฟเบอร์เป็นรากฐานของเฟรมเวิร์ก PHP แบบอะซิงโครนัสสมัยใหม่ Fiber::suspend() ส่งต่อการควบคุม ส่วน resume() จะคืนการควบคุม

ตรวจสอบความเข้าใจ

จะส่งค่าเข้าไปในไฟเบอร์ที่ถูกระงับการทำงานได้อย่างไร

คำถามที่พบบ่อย

บทเรียน “Fibers: การทำงานพร้อมกันแบบร่วมมือกัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Fibers: การทำงานพร้อมกันแบบร่วมมือกัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Fibers: การทำงานพร้อมกันแบบร่วมมือกัน”

หยุดชั่วคราวและทำงาน PHP ต่อด้วย Fibers เพื่อสร้างรูปแบบการทำงานคล้ายอะซิงก์ คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “Fibers: การทำงานพร้อมกันแบบร่วมมือกัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. นิพจน์ Match และอาร์กิวเมนต์ที่ระบุชื่อ
  2. ตัวดำเนินการ Nullsafe และชนิด Union
  3. การแจกแจงค่า (Enums)
  4. Fibers: การทำงานพร้อมกันแบบร่วมมือกัน
← กลับไปที่ PHP Academy