بعد از این درس دقیقاً چه بلدی؟
- موضوع «suspend» را با زبان ساده برای فرد دیگری توضیح میدهی.
- مثال همین درس را خطبهخط میخوانی و خروجی آن را پیشبینی میکنی.
- کد را تغییر میدهی، نتیجه یا ساختار آن را بررسی میکنی و خطا را مرحلهای اصلاح میکنی.
آشپز با چند سفارش
وقتی یک غذا منتظر فر است، آشپز وضعیت آن را نگه میدارد و سراغ کار دیگری میرود؛ بعداً از همان مرحله ادامه میدهد.
Fiber بخشی از اجرا را تعلیق و بعداً از همان نقطه ادامه میدهد. خودش Event Loop یا همزمانی شبکه نمیسازد؛ کتابخانهها از آن برای APIهای Async خواناتر استفاده میکنند.
چرا مهم است؟ این مفهوم یکی از آجرهای مسیر حرفهای PHP است. فعلاً لازم نیست همه جزئیات را حفظ کنی؛ باید دلیل استفاده و اثر هر خط را بفهمی.
اولین تمرین تو: Fiber درخواست را آغاز، در نقطه انتظار متوقف و با داده دریافتشده ادامه میدهد؛ در پروژه واقعی Scheduler این کار را مدیریت میکند.
اول بفهم، بعد کد بنویس
suspend
اجرای Fiber را موقت متوقف و مقداری به بیرون میدهد.
resume
اجرا را از محل توقف با مقدار تازه ادامه میدهد.
Event loop
زمان آمادهشدن I/O و ادامه کارها را مدیریت میکند و جدا از خود Fiber است.
مدل ساده انتظار ورودی
Fiber درخواست را آغاز، در نقطه انتظار متوقف و با داده دریافتشده ادامه میدهد؛ در پروژه واقعی Scheduler این کار را مدیریت میکند.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
کد را کامل کن و ساختار آن را بررسی کن
این درس وارد قابلیتهای سروری یا حرفهای شده است. برای امنیت سایت، کد دلخواه روی سرور اجرا نمیشود؛ بررسیگر، وجود اجزای ضروری و منطق مورد انتظار را کنترل میکند و راهنمای اصلاح میدهد.
کد را کامل کن و «بررسی ساختار» را بزن.
این مثال خطبهخط چه میگوید؟
فعلاً حفظ نکن؛ هر خط را به یک جمله ساده تبدیل کن.
- 1
<?phpاز اینجا مفسر PHP شروع به خواندن کد میکند.
- 2
$fiber = new Fiber(function (): void {یک مقدار با نام $fiber نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 3
$value = Fiber::suspend("waiting");یک مقدار با نام $value نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 4
echo "received: $value";نتیجه این عبارت به خروجی پاسخ فرستاده میشود.
- 5
});این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
- 6
$state = $fiber->start();یک مقدار با نام $state نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 7
$fiber->resume("data");این خط بخشی از منطق اصلی مثال است؛ نامها و علامتها را از راست به چپ، بخشبهبخش بخوان.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
مقدار $state را بررسی کن و تفاوت terminate، suspend و exception را بنویس.
از ساده به چالشی، بدون پرش
یکی از مقدارهای مثال را عوض کن، خروجی را روی کاغذ حدس بزن و سپس بررسی کن.
مقدار $state را بررسی کن و تفاوت terminate، suspend و exception را بنویس.
سناریوی «مدل ساده انتظار ورودی» را با نامهای واضحتر و یک حالت تازه گسترش بده.
این سه اشتباه را انجام نده
تصور اینکه Fiber خودکار کد را موازی میکند
نوشتن Event Loop ناقص در Production
مسدودکردن Thread با I/O معمولی داخل جریان Async
5 پرسش کوتاه؛ مطمئن شو واقعاً یاد گرفتهای
برای هر پرسش یک پاسخ انتخاب کن. بعد از هر انتخاب، دلیل پاسخ را همانجا میبینی.
Fiber بهتنهایی چه چیزی نیست؟
کدام توضیح، «suspend» را دقیقتر بیان میکند؟
بهترین قدم بعد از خواندن مثال این درس چیست؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
درس را فقط وقتی تمام کن که کد را تغییر دادهای
دیدن آموزش کافی نیست؛ یک مقدار را تغییر بده، خروجی را پیشبینی کن و بعد اجرا بزن.