2021年11月,PHP 8.1版本发布Fibers功能。PHP 8.1版本包含Fiber类。Fiber类实现协程。Fiber::__construct()接收回调函数。Fiber::start()执行回调函数。Fiber::suspend()暂停Fiber执行。Fiber::suspend()传递参数给调用者。Fiber::resume()恢复Fiber执行。Fiber::resume()传递参数给Fiber。Fiber::getReturn()获取回调函数返回值。Fiber::isStarted()返回布尔值。Fiber::isSuspended()返回布尔值。Fiber::isRunning()返回布尔值。Fiber::isTerminated()返回布尔值。
每个Fiber维护独立调用栈。调用栈包含局部变量。Fiber::suspend()在嵌套调用中暂停执行。Fiber::throw()抛出异常到Fiber内部。FiberError类捕获Fiber异常。Fiber::getReturn()在Fiber终止后调用。
Fibers不提供循环。循环需要开发者实现。Revolt库提供循环支持。Revolt库与Fibers配合使用。Amp v3框架使用Fibers实现异步。ReactPHP通过桥接支持Fibers。
PHP 8.0版本发布JIT编译器。JIT编译器提升代码执行速度。JIT不改变异步编程模式。PHP 8.2版本新增只读类。PHP 8.2版本不修改Fibers。PHP 8.3版本优化FiberError处理。PHP 8.4版本保持Fibers API稳定。
Generator使用yield关键字暂停执行。Generator从yield点恢复执行。Fibers使用Fiber::suspend()暂停执行。Fibers从Fiber::resume()点恢复执行。Generator的yield只能在函数最顶层使用。Fiber的suspend能在嵌套调用中使用。Generator不能控制调用栈。Fibers控制完整调用栈。
Swoole扩展在PHP 8.1前提供协程支持。Swoole扩展替换PHP同步函数。Swoole扩展使用自定义协程调度器。Fibers集成在PHP内核中。Fibers不替换PHP函数。Fibers提供底层协程原语。开发者基于Fibers编写库。
2024年,FiberMap库实现协程映射操作。FiberPool库管理协程池实例。FiberChannel库实现协程间通信。PHP官方文档增加Fibers示例代码。PHP社区发布Fibers调试工具。开发者使用Fibers并发处理HTTP请求。开发者使用Fibers并发执行数据库查询。开发者使用Fibers实现任务调度器。







