因为 php8.1 开始支持完整的协程 fiber ,
php4.0 开始已经支持register_tick_function
,
于是register_tick_function
可以让 php 代码每执行一条语句就能回调到register_tick_function
登记的回调函数里。
于是利用register_tick_function
的回调函数,回调一个协程的调度功能的函数,来调度协程,就能实现在 php 进程里同时并发运行多个协程,实现类似 golang 纤程的功能。
当然和 golang 不能比,golang 可以把多个纤程分配在多个线程里,让一个线程并发执行多个纤程,而 php 不支持线程,只能在一个进程里同时并发运行多个纤程。
这个 php 官方文档评论里的就给了个例子:
https://www.php.net/manual/en/language.fibers.php#127282
php 不能让操作系统调度线程,确实是个遗憾,但可并发执行的协程确实一定程度上弥补了这个遗憾。