@
asstar 感谢兄弟你回复了这么多,Java 和动态语言优劣,PHP 线程的急需性(尽管我很赞同韩天峰在公开场合表达的一些看法),语言通用性发展规划,GC 实现等,这是一个很复杂且旷日持久的争论,贯穿整个软件工程发展史,不是你我在这里面回几句嘴就能争论清楚的,所以不评论,见仁见智,多说无益。我也从没期望他能成为通用语言,毕竟我要的只是能较快且高质量完成我业务的工具。
但是对于 swoole 和异步,协程编程我还是要说两句,你存在较深的误解,源头还是因为你没用 PHP 做过相应的业务场景。
首先你说的没错,web 场景下,很多时候 io 是瓶颈,但是也说明你经历过的业务场景下,也只能接触到的这种瓶颈。而我用 swoole 做的网络相关编程项目,本来涉及到大量数据读写,传统模式开发模式下,本来也是 IO 是最大瓶颈,然而 swoole 的协程引入,已经成功的帮我把 io 瓶颈消除了,现在反而是单核 CPU 算力成了瓶颈,(所以我是很期待 PHP 在计算能力上有较大提高的,并不是盲目鼓吹 PHP 成为通用语言)。你接触不到不代表没有这种业务模型存在。
其次并不是说常驻解决所有 IO 问题,常驻也不是 swoole 的首创,在 PHP 的历史上比 swoole 出现的还要早,常驻解决的只是框架加载的 IO 消耗,顺便解决一下内存对象周期问题,等你接触到网络编程你就会发现还有很多常规业务线接触不到的新认知。
从你的评价,你还是对异步编程和协程间区别不太弄得清,建议了解一下 swoole4 全新设计的协程设计,而且 swoole4.3+已经完全从主线移除了异步模型,协程在 io 方面完全可以发挥出比线程更小的开销,更好的性能。
关于 PHP 语言层面的异步,既然你谈到了
tornado,就应该了解下 react PHP,workerman,这些都是纯语言实现的事件驱动和网络编程框架(虽然高性能的事件底层循环要依赖 libevent,但是也是一个可选标准库,其他语言相关实现也是可选依赖),而且这些也是常驻框架,基于 react PHP,还实现了一个 PHP PPM,只是如果你只做 web 业务,你基本上很少会接触到这些东西。
还是我说的那句话,PHP 设计的时候为 web 考虑了很多,但是不代表他只有在 web 开发才能发挥作用,但是更不代表 PHP 可以写个操作系统。我始终检查开头的那句话,我要的只是能较快且高质量完成我业务的工具。
我从 Swoole2 开始关注 Swoole,但是只有 Swoole4 全新设计的协程吸引了我全身心投入。Swoole2 那种模仿 node 的回调地狱设计我也不怎么感冒,我可不是 eeChen,见什么都舔。