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 за ревью текста.