因为 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 不能让操作系统调度线程,确实是个遗憾,但可并发执行的协程确实一定程度上弥补了这个遗憾。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.