3月8日,PHP社区发起了将FiberRFC加入PHP的投票,在开发者领域引起热议。Fiber作为协程堆叠的一种尝试,为PHP的标准化提供了一些新的可能。按照计划,投票将于3月22日结束。目前的投票数据(截至3月17日12:00)为41票赞成,12票反对。根据规定,Fiber很可能通过投票加入PHP(2/3票通过)。但引发开发者领域这场激烈讨论的是两位投反对票的KOL——PHP创始人RasmusLerdorf和Swoole创始人韩天峰@matyhtf。尤其是Swoole@matyhtf的创始人韩天峰,作为“利益相关者”,这次的反对票被解读为意味深长。Swoole和Fiber的关系在讨论这个异议之前,我们需要了解一下Fiber和Swoole这两个产品。根据FiberRFC中的描述,Fiber主要用于实现异步I/O的协程,提供独立的堆栈分配、函数调用的暂停和恢复,并将作为扩展集成到PHP中。Swoole是一个PHP协程框架,为PHP提供协程和高性能网络编程支持,提供各种通信协议的网络服务器和客户端模块,可以方便快捷的实现TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通信、游戏、微服务等,让PHP不再局限于传统的Web领域。对于这两款产品,韩天峰@matyhtf在文章中也给出了自己的看法:Fiber只是协程上下文管理的一种实现,更像是Generator的升级版。Swoole是一个完整的协程Runtime&Framework,更像Golang。Fiber对Swoole有什么威胁?正如我们开篇所说,Fiber作为对协程堆叠的尝试,是PHP协程标准化的一个进步。作为先行者,Swoole在推动协程标准化方面做得并不多。但是标准化是PHP未来发展的大势所趋。如果Swoole不能解决标准化的问题,那么Fiber的发展必然会得到开发者和社区的支持。因此,Swoole创始人韩天峰@matyhtf作为“利益相关者”投了反对票,这对很多开发者来说是“有意义的”。他怀疑是担心Fiber的发展会成为Swoole的竞争对手,阻碍未来的商业化道路。不过Swoole创始人韩天峰@matyhtf也在文中表示,Fiber扩展进入内核后不会影响Swoole。“Fiber是一个很底层的API,不是可以直接使用的技术,真正能和Swoole竞争的应该是Amphp和ReactPHP。”韩天峰@matyhtf也指出,Fiber在某些层面上对Swoole是有好处的。PHP内核开发者为协程切换维护了一个全局状态列表,SwoolePHPCoroutine这部分代码实现变得简单。另外,其他扩展也会注意到协程的存在,在使用C全局变量或栈内存时考虑协程切换的可能性,避免Crash。ext-fiber被合并进去后,也应该被标记为alpha状态。一些特殊情况可能会导致崩溃,需要很长时间才能收集并解决这些问题。他认为在PHP8.1中添加Fiber是一个草率的决定。最好先设计一些系统,比如考虑以下七个方面:EventLoopAPI协程(对应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)server:实现PHP-FPM协程版本,或者提供一个新的协程HttpServerPHP开发者想要从传统的LAMP/LNMP短生命周期和串行编程模式转变为CSP协程+通道并发编程,他们真正需要的是a一套完整、系统、系统、易用、可靠的技术解决方案。因此,最好创建多个RFC,将这些问题讨论清楚,并在PHP9版本中提供完整的协程解决方案。不需要达到Golang的水平,至少要能生产。这将对PHP产生重大影响。但正如韩天峰@matyhtf自己所说,这真的是要取代Swoole。普通开发者怎么看?编程语言的话题总是引起其开发者的关注。PHP是否是最好的语言也是一个讨论的焦点,有好有坏。但无论如何,编程语言或者其他技术都需要随着技术和社会的发展做出相应的改变,才能跟上时代的潮流。对于Swoole,很多开发者认为它已经很好用了。但是,正如许多人指出的那样,它更多的是一种解决方案,一种框架,而不是一种语言特性。可能需要进一步拆解大大小小,争取在9.0成为一个成熟完整的系统。而Fiber作为一个简单的特性,无论与Swoole是敌是友,都为开发者提供了无限的想象空间。从php官方的角度来看,这个特性也是属于开发者的。.相信投赞成票的人,绝大部分不只是认为Fiber的未来可期,而是“有聊胜于无”、“变革前有希望”。不过,这两个目前闹得沸沸扬扬的KOL,从某种程度上来说,是有一些利益的。作为普通开发者,他们等待的是一些更中立、更客观的声音。从目前的投票情况来看,Fiber提案的通过基本是板上钉钉的事。其通过后会带来怎样的影响或变化,我们只能拭目以待。部分参考资料:GitHub地址:https://github.com/amphp/ext-...OSC开源社区:《反对PHP协程提案,Swoole创始人被质疑存私心》PHP社区:https://wiki.php.net/rfc/fibers汉天风知乎专栏:https://zhuanlan.zhihu.com/p/...知乎题目:https://www.zhihu.com/questio...
