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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- นิพจน์ Match และอาร์กิวเมนต์ที่ระบุชื่อ
- ตัวดำเนินการ Nullsafe และชนิด Union
- การแจกแจงค่า (Enums)
- Fibers: การทำงานพร้อมกันแบบร่วมมือกัน