文|局长
PHP 社区上周(3月8日)发起了将 Fiber RFC 添加到 PHP 的投票。
根据 Fiber RFC 中的描述,Fiber 紧张用于为异步 I/O 实现协程,供应了独立栈分配、函数调用的停息和规复功能,它将作为扩展集成到 PHP 中:https://github.com/amphp/ext-fiber。
按照操持,投票将于3月22日截止,最新数据为 38 票赞许、11 票反对。从目前的结果来看,Fiber RFC 很大可能会通过投票从而被添加到 PHP(得到 2/3 的附和票即可通过)。
当前公开的投票结果显示,两位创始人——PHP 创始人 Rasmus Lerdorf 和 Swoole 创始人韩天峰@matyhtf 均投了反对票。
Swoole 是一个 PHP 协程框架,为 PHP 供应协程、高性能网络编程支持,并供应了多种通信协议的网络做事器和客户端模块,可以方便快速地实现 TCP/UDP 做事、高性能 Web、WebSocket 做事、物联网、实时通讯、游戏、微做事等,使 PHP 不再局限于传统的 Web 领域。(来自 Swoole 官网先容)
Reddit 上的一篇帖子引用了@matyhtf 在 PHP 内部发送的邮件,里面提到他担心 Fiber 只能在 AmPHP 这种框架中利用,而对付其他普通的 PHP Web 项目没有代价。这篇帖子在 Reddit 引起了不少谈论,有人认为 Fiber 是 generator 的升级版本,它是协程的最小化核心实现,并且不会对 PHP 产生不利影响,将它集成到 PHP 有利于发展和探索未来的异步生态。也有人质疑@matyhtf 投反对票是由于担心此提案会对 Swoole 的商业化 (Swoole Plus) 造成影响。
有人将这篇帖子搬运到了海内的社区,同样引起了激烈的谈论。@matyhtf 对此进行了回应,他的不雅观点是 Fiber 还不足完善,该当先作为 PECL 扩展进行验证,而不是直接集成到 PHP 中。@matyhtf 在知乎上的答案写道:
我要表达的意思是 “Fiber 紧张是供应给 amphp 和 reactphp 这样 php 实现的异步框架利用的,对付普通 PHP Web 项目没有太大代价”。
……
对付 Fiber RFC 我的不雅观点是,建议先作为一个 PECL 扩展,PHP 内核开拓者能够思考清楚 PHP 未来协程的整体技能体系和实现办法后再做决定。实际上异步编程颠覆了 PHP 一贯以来的设计哲学和编程模式。如果 PHP 措辞官方决定要支持像 Node.js、Golang、Swoole 这样的异步/协程并发编程模式,那么就须要系统性思考一下整体的架构,以及完全的实现。
@matyhtf 表示他给 Fiber RFC 投反对票与 Swoole 无关,由于 Swoole 是一个纯粹的开源技能项目,而不是商业产品。如果有可能,他乃至乐意修正 Swoole 的 Copyright,并将 swoole-src 的源代码贡献给 php-src。不过对付 PHP 支持协程的提案,他认为这是一项重大变更,该当进行深入谈论,从语法、标准库和 ZendVM 方面进行重新设计,而不是仓促做出决定。
@matyhtf 连续揭橥文章(关于 PHP 8.1 的 Fiber RFC)从技能细节详细地阐明了自己反对 Fiber RFC 的缘故原由。他认为用户真正须要的是一种完全的、系统性、成体系、大略易用、可靠的一整套技能方案,并根据自己的履历提出可从 7 个方面进行考虑:
EventLoop API
协程(对应 ext-fiber)
IO 调度器(Socket/FileSystem/ChildProcess/Signal/Timer/Stdout/Stdin)
CPU 调度器
现有同步壅塞 IO 扩展(redis、curl、php_stream、sockets、mysqli、pdo_mysql 等)和内置函数(sleep、shell_exec、sleep、gethostbyname 等)如何实现支持协程,变成异步非壅塞模式
协程通信(channel)
做事器:实现 PHP-FPM 协程版,或者供应一个新的协程 HttpServer
虽然@matyhtf 给出了充分的情由投反对票,但从目前看来,许多人并不认可他的做法。他们认为,即便实现 PHP 的协程化难度很大也不须要等到有成熟方案之后才合并,也不能由于 Fiber 不足完善,就预测它不能知足大多数人的哀求。反而由于 Fiber 是最小化实现,集成到 PHP 不会对利用者造成很大的掩护包袱,却又能知足很多人的项目需求,他们可以在此根本上进行更多实现,为用户开放了探索各种协程方案的可能。
因此,这一部分开拓者认为没有情由反对将 Fiber RFC 添加到 PHP。双方思考角度不同,以是给出了截然相反的投票结果,而且他们都有各自的态度——虽然初衷都是希望 PHP 变得更好,但无论如何,末了还是以投票结果为准。