Fibers — асинхронному PHP быть?
https://wiki.php.net/rfc/fibersМейнтенер Amphp опубликовал RFC по файберам и обновленное расширение с реализацией
amphp/ext-fiber.
Проблема асинхронного кода в текущем виде с ReactPHP и Amp в том, что весь код должен быть асинхронным: либо нужно прокидывать
yield
либо
Promise
по всей цепочке вызовов.
Файберы решают эту проблему. Это как генераторы, то есть можно прерывать выполнение функций, но файберы не загрязняют стек вызовов и не надо добавлять
yield
на каждом уровне.
Можно представить файбер как функцию, которая сама хранит в себе стек вызовов и которую можно остановить или продолжить в любой момент.
Предлагается добавить класс
Fiber
и интерфейс
FiberScheduler
. Последний это, по сути, ивент луп. Его реализация в PHP 8.1 не предлагается и остается в планах на будущее.
То есть
глобально это пока не меняет картину асинхронного PHP: стандартная библиотека все равно блокирующая.
Зато появится официальный стандарт ивент лупа, а разработчики пакетов типа ReactPHP и Amp смогут писать асинхронные обертки проще и быстрее. И использовать их будет приятнее. В общем,
хороший первый шаг в направлении.
Примеры тут:
https://github.com/amphp/ext-fiber/tree/master/examplesВероятность принятия: высокая.
______
Спасибо https://github.com/mmasiukevich за ревью текста.https://github.com/mmasiukevich за ревью текста.