11

PHP 再上热搜!Swoole 创始人投出反对票,质疑 PHP 协程最新提案

 3 years ago
source link: https://segmentfault.com/a/1190000039653186
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

3月8日,PHP 社区发起了将 Fiber RFC 添加到 PHP 的投票,这一举动引起了开发者领域的激烈讨论。

Fiber 作为有栈协程的尝试,对 PHP 的标准化提供了一些新的可能性。按照计划,投票将于 3 月 22 日截止,目前投票的数据情况(截止至3月17日12:00)为 41 票赞同、12 票反对,根据规定,Fiber 很大可能会通过投票从而被添加到 PHP(获得 2/3 的赞成票即可通过)。

但这件事情在开发者领域引起激烈讨论的导火索,是两位投出了反对票 KOL —— PHP 创始人 Rasmus Lerdorf 和 Swoole 创始人韩天峰@matyhtf。

特别是 Swoole 的创始人韩天峰@matyhtf,作为“利益相关人士”,这一张反对票被解读出了意味深长的含义。

Swoole 与 Fiber 的关系

在讨论这张反对票之前,我们要先来了解一下 Fiber 和 Swoole 两个产品。

根据 Fiber RFC 中的描述,Fiber 主要用于为异步 I/O 实现协程,提供了独立栈分配、函数调用的暂停和恢复功,它将作为扩展集成到 PHP 中。

而 Swoole 是一个 PHP 协程框架,为 PHP 提供协程、高性能网络编程支持,并提供了多种通信协议的网络服务器和客户端模块,可以方便快速地实现 TCP/UDP 服务、高性能 Web、WebSocket 服务、物联网、实时通讯、游戏、微服务等,使 PHP 不再局限于传统的 Web 领域。

对这两个产品,韩天峰@matyhtf 也在文章中给出了他认为的差别:

  • Fiber 只是协程 Context 管理的一种实现,更像是 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 内核开发者维护了协程切换的全局状态列表,Swoole PHPCoroutine 这部分的代码实现就变简单了。另外,其他扩展也会注意到协程的存在,使用 C 全局变量或栈上内存时考虑到协程切换的可能性,避免出现 Crash。ext-fiber 合并进来之后,也应标记为 alpha 状态,一些特殊情况能会引起崩溃,需要比较长的时间去收集解决这些问题。

他认为在 PHP 8.1 加入 Fiber 是一个仓促的决定。不如先进行一些系统的设计,比如从以下 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

PHP 开发者想要从传统的 LAMP/LNMP 短生命周期、串行编程的模式转型到 CSP 协程+通道并发编程,真正需要的是一种完整的、系统性、成体系、简单易用、可靠的一整套技术方案。因此不如创建多个 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...

segment fault 思否


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK