PHP 的 JIT 终于要来了

2019-02-01 11:41:33 +08:00
 feiyuanqiu

https://wiki.php.net/rfc/jit

Dmitry 提交了一个关于将 jit 加入 PHP 的 rfc,看起来已经开发地差不多了(感谢 Dmitry 和鸟哥~)。

下面是 RFC 的大致内容(与原文不完全一致,加入了自己的一些理解)

JIT 的好处

主要是 JIT 带来的性能提升,以及性能提升对整个语言使用场景的扩展及语言生态发展的支持。

  1. 目前已经很难通过常规手段提升 PHP 的性能,JIT 基本上是目前性能提升的唯一手段;
  2. JIT 带来的性能提升可以让 PHP 在更多使用场景( CPU 密集)中发挥作用;
  3. 可以使用 PHP 来开发内置函数,而不用担心性能方面的问题。这一方面可以加速语言的发展(更多人可以参与进来),同时也可以减少目前使用 C 开发容易出现的内存管理、溢出等问题

实现细节

预计的发布节点

11243 次点击
所在节点    PHP
35 条回复
jfcherng
2019-02-01 16:03:40 +08:00
@ihipop 當然的,JIT 的發展對 PHP 來說肯定能帶來好處的! JIT 本身就像 PHP 本身一樣能夠被再優化,現在只是非常初期一個能跑的版本而已,看好未來繼續發展。
ihipop
2019-02-01 16:10:10 +08:00
@realpg
不认同阁下说的 “复杂就是像 JAVA ”,如果说复杂就是像 Java,那么比 PHP 更“像” Java 的东西多的很,甚至还有那些在 Java VM 上自成一体的 Kotlin,如果都按照你的说法,这些都不要搞了,因为“既然这么像,为什么不选择 java ?" 是吧?如果都这么想,RUST 之类的东西都不该存在,TIDB 之类的项目全应该用 Java 搞,是吧?
askfilm
2019-02-01 16:14:50 +08:00
赞! @jfcherng Reddit 上那个日常腳本分享能给个链接学习学习吗?
jfcherng
2019-02-01 16:31:19 +08:00
hheedat
2019-02-01 17:34:26 +08:00
支持
tanszhe
2019-02-01 18:11:29 +08:00
大赞 !!!
danc
2019-02-02 03:41:26 +08:00
然而并没有什么用
shellic
2019-02-02 06:24:41 +08:00
PHP 现在其实也并不复杂,还是很简单上手,只是多了更多现代化的东西,更加的规范;相信 PHP 之前被人诟病的问题会渐渐好起来
8355
2019-02-02 10:06:02 +08:00
没什么喷点 性能提升就行了. 老铁没毛病
terrywater
2019-02-03 08:53:41 +08:00
你们说为什么不用 java ?
知道 php 的高效开发效率吗?一个 php 顶 4 个 java 的开发效率吧?

移动端十代,web 霸主 php 语言最大的短板就是性能,JIT 大幅度提升性能,你们还喷个卵?

整天尼玛的黑 php,然并卵,看看招聘,还是很多公司在用 php。
phpok
2019-02-09 06:07:35 +08:00
@vus520 是啊,我也感觉现在的 php 是越来越复杂了,真心跟不上时代了~
zxk7516
2019-03-27 09:33:07 +08:00
我刚学 php 就学的是 php70,但是现在上班的公司还在 php55
asstar
2019-05-11 17:51:40 +08:00
@ihipop 兄弟,看了一下评论,我也是一个多年的 php 开发了,很理解你的心情。
不过我觉得 php 确实特性越来越多像 java 的东西,之所以说像 java,是因为基于 class 的这套 oop 形式和 java 很像,当然早一点的 oop 语言都是 class based。其实本来动态语言有更多自己的特色,比如元编程的能力,ruby 和 python 基本都有。而 php 则一直在向 java 这样的“工业级编程语言”靠齐,本身动态语言的优势都在忽略,而 java 本身很多方式是因为静态语言不得不如此。这样一学下来,淡化了优势,反而加强了一些强加上来的东西。

php 的使用相当多,走向正规化是必然。比如框架,包管理,,,学习成本因此而上升也是绝对值得的。但就像 python 和 ruby,lisp 之类的元编程方式都不一样。不是说像 java 就能成为“工业级编程语言”,从 5.x 开始,php 语法就越来越像 java 了。

还有一点不太赞同,web 这一块,瓶颈基本都在 io,不存在说你换成 swoole 常驻了之后瓶颈就变成 cpu 了,只要不是做数值运算,基本瓶颈都是在 io。swoole 这种异步模式,其他语言里基本都不少见,像 tornado。也谈不上什么颠覆性的东西。编程模式和常见的 fastcgi 不一样,内存泄露的可能性增加,难度增加。要说 php 做通用编程,先不说别的,语言层面支持异步吗?现在靠 swoole 一个扩展支持,但是语言层面配套跟不上啊,swoole 只不过相当于用 c 开了个后门而已,比如你说的协程库什么的。而且说到并行,现在有成熟的线程实现吗?仅仅在 unix 下有一个多进程实现,更别说其他的通用库了。所以说,php 现在离通用语言还是很远,而社区似乎也没有搞成通用语言的趋势。

php 向下兼容不错,但我有时候觉得还不如像 python 搞个不兼容的新版本出来,彻底整改。py2 到 py3 虽然很多人吐槽,但实际现在 2.7 已经停更了,大部分第三方库已经迁移到 py3 了,升级完成得很不错了。
ihipop
2019-05-11 23:42:17 +08:00
@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,见什么都舔。
ihipop
2019-05-12 00:06:24 +08:00
另外,我觉得韩天峰有句话说的很对,技术栈上,PHP 只是 C 的一个开发效率提升的补充,资深的高级 PHP 程序员,很多时候都是很好的 C 程序员(参考鸟哥),C 对于 PHP 不是后门,是基石。PHP 极早期很多函数就是对 C 的一些简单封装,你可以看下 PHP4 时代遗留下来的东西,很多有很重的 C 痕迹,PHP5 拥抱 oop 不是和 Java 学,而是跟着语言发展潮流走,拥抱开发方式的发展和变化,但是发展到现在,有人觉得弄出 laravel 那种花式封装的就是高级 PHP 程序员了,其实离真的高级资深 PHP 程序员还远着十万八千里。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/532386

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX