您好,欢迎访问一九零五行业门户网

PHP创始人​​​​​​​和Swoole创始人投反对票,协程提案Fiber引激辩

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 变得更好,但无论如何,最后还是以投票结果为准。
其它类似信息

推荐信息