PHP Fibers на практике — когда это реально полезно
PHP 8.1 добавил Fibers, но до сих пор вижу много непонимания что это такое и когда их применять. Попробую объяснить на работающем примере который можно запустить прямо в sandbox.
Fiber это не многопоточность. Это кооперативная многозадачность: вы сами говорите когда передать управление через Fiber::suspend().
Запустите. Вывод будет: A старт, B старт, A продолжение, B продолжение, A завершение, B завершение. Никакой параллельности, просто чередование.
Практический смысл: генераторы потоков данных, реализация async/await поверх event loop, корутины без Swoole. Не стоит тащить Fibers ради простых задач где хватит обычного цикла.
Хорошее объяснение. Добавлю практический пример: передача значений между fiber и основным кодом через suspend/resume:
По сути это генератор на минималках. Разница с yield: Fiber работает в своем стеке вызовов, можно вызывать suspend() из глубоко вложенных функций, а не только из тела функции-генератора.
Еще один практичный сценарий: обработка большого файла построчно без загрузки в память, с возможностью паузы.
В реальном приложении вместо explode будет fgets() из файлового дескриптора, и тогда это полноценный ленивый ридер.
```php blocks are runnable.