PHP 8 确认支持?JIT

h4cd
 h4cd
发布于 2019年04月01日
收藏 33

一直以来,大家都在讨论 PHP 8 中是否会支持 JIT(Just-In-Time)即时编译执行功能,最新消息是官方已经确认将其引入。

Include JIT into PHP 8?
Real name Yes No
ab (ab)  
ashnazg (ashnazg)  
beberlei (beberlei)  
brandon (brandon)  
bwoebi (bwoebi)  
carusogabriel (carusogabriel)  
cmb (cmb)  
cpriest (cpriest)  
dams (dams)  
danack (danack)  
derick (derick)  
diegopires (diegopires)  
dmitry (dmitry)  
duncan3dc (duncan3dc)  
emir (emir)  
galvao (galvao)  
guilhermeblanco (guilhermeblanco)  
jhdxr (jhdxr)  
jmikola (jmikola)  
jpauli (jpauli)  
jwage (jwage)  
kalle (kalle)  
klaussilveira (klaussilveira)  
krakjoe (krakjoe)  
laruence (laruence)  
lcobucci (lcobucci)  
levim (levim)  
malukenho (malukenho)  
mariano (mariano)  
mbeccati (mbeccati)  
mike (mike)  
narf (narf)  
neeke (neeke)  
nikic (nikic)  
ocramius (ocramius)  
pajoye (pajoye)  
peehaa (peehaa)  
petk (petk)  
pmmaga (pmmaga)  
pollita (pollita)  
remi (remi)  
reywob (reywob)  
rtheunissen (rtheunissen)  
salathe (salathe)  
sammyk (sammyk)  
stas (stas)  
svpernova09 (svpernova09)  
tianfenghan (tianfenghan)  
wjx (wjx)  
yunosh (yunosh)  
zeev (zeev)  
zimt (zimt)  
Final result: 50 2

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

PHP 实现了一个虚拟机 Zend VM,它会将人类可读脚本编译成虚拟机理解的指令,也就是操作码,这个执行阶段就是“编译时(Compile Time)”。在“运行时(Runtime)”执行阶段,虚拟机 Zend VM 会执行这些编译好的操作码。

通常编译时与运行时两个阶段是独立分开的,脚本编译完成后,像 APC 与 OPCache 这样的字节码缓存组件会缓存这些操作码。而 JIT 去掉了编译时阶段,它将这编译时与运行时两个阶段合为一体,实现即时编译与执行。

JIT 是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行。在 PHP 中,这意味着 JIT 将为 Zend VM 生成的指令视为中间表述,并以依赖于体系结构的机器码执行,也就是说托管代码的不再是 Zend VM,而是更为底层的 CPU。

虽然自 PHP 7.0 以来,通过优化核心数据结构 HashTable、强化 Zend VM 中某些操作码与持续改进 OPCache 的 Optimizer 组件等具体措施,PHP 性能得到了显著提升,但是实际上这些优化似乎已经走到极限了。现在 JIT 从底层着手,被认为是目前提升 PHP 性能的最佳出路。

关于是否引入 JIT 的官方投票结果已于近日公布,因为大部分核心开发者投了赞成票,所以 PHP 8 中将会支持 JIT。

另外值得一提的是,PHP JIT 对于使用 PHP 的网站来说提速可能并不明显,因为 JIT 在 CPU 密集型的代码上效果最好,而一般情况下,用 PHP 编写的程序都是 I/O 密集型的。简单来说就是,PHP 程序往往受限于 I/O 而不是 CPU,使 PHP 代码运行速度变慢的因素往往是它们正在执行的 I/O 操作,包括连接、读取和写入数据库、高速缓存、文件与套接字等。

PHP 中 CPU 密集型代码的一个例子是 Zend/bench.php。

那么 PHP 中的 JIT 将会在哪里发挥作用呢?答案是数学领域。关于 PHP JIT 的详细介绍,可以查看:https://blog.krakjoe.ninja/2019/03/php-gr8.html

本站文章除注明转载外,均为本站原创或编译?;队魏涡问降淖?,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.aercaste.com]
本文标题:PHP 8 确认支持?JIT
加载中

精彩评论

志田未来
志田未来
@红薯 有bug 我把@左华栋加灰了,引用回复还能看到这傻逼发言啊,处理下。
看到就烦,天天php凉了,php就算没有jit也不会凉。
脑子有毛病,爱用用不用滚。
宇润
宇润
Swoole解决了IO密集场景问题,JIT解决了计算密集场景问题,厉害了!
eechen
eechen

引用来自“左华栋”的评论

说重点吧,一是php 最大的性能瓶颈在于IO模型,不论是异步非阻塞IO还是协程都能解决,但是不兼容php现有生态,其他的解决办法比如swoole 。
二是 8的发布时间是2021年,凉透了。。。
Swoole不兼容PHP现有生态?
然而我在Swoole中还不是可以composer安装PHPOffice和PHPMailer这些库来用.
本质上,只要兼容PHP-CLI模式的PHP程序和库,就可以跑在Swoole上.
Swoole应用本质也不过是个PHP-CLI应用,只不过多了更多支持异步协程编程的API,仅此而已.

然加PHP JIT作者说得很清楚,JIT对PHP实际应用性能提升不大,对bench.php这种计算密集型应用,才有明显效果.
所以,可拔插的JIT完全是锦上添花,所以PHP8什么时候发布并不重要,虽然PHP7.4也可以使用体验版JIT.
PHP 7.4在bench.php测试中,启用JIT时耗时不到禁用JIT时的一半,也就是计算性能提升了一倍多.

要显著提升PHP Web服务性能,PHP7+Swoole已经足够.
https://www.techempower.com/benchmarks/
PHP7+Swoole在TechEmpower默认的Fortunes测试中排名第4(前3依次是C/Java/Go).
这波天秀
这波天秀

引用来自“左华栋”的评论

说重点吧,一是php 最大的性能瓶颈在于IO模型,不论是异步非阻塞IO还是协程都能解决,但是不兼容php现有生态,其他的解决办法比如swoole 。
二是 8的发布时间是2021年,凉透了。。。

引用来自“eechen”的评论

Swoole不兼容PHP现有生态?
然而我在Swoole中还不是可以composer安装PHPOffice和PHPMailer这些库来用.
本质上,只要兼容PHP-CLI模式的PHP程序和库,就可以跑在Swoole上.
Swoole应用本质也不过是个PHP-CLI应用,只不过多了更多支持异步协程编程的API,仅此而已.

然加PHP JIT作者说得很清楚,JIT对PHP实际应用性能提升不大,对bench.php这种计算密集型应用,才有明显效果.
所以,可拔插的JIT完全是锦上添花,所以PHP8什么时候发布并不重要,虽然PHP7.4也可以使用体验版JIT.
PHP 7.4在bench.php测试中,启用JIT时耗时不到禁用JIT时的一半,也就是计算性能提升了一倍多.

要显著提升PHP Web服务性能,PHP7+Swoole已经足够.
https://www.techempower.com/benchmarks/
PHP7+Swoole在TechEmpower默认的Fortunes测试中排名第4(前3依次是C/Java/Go).
你对一个喷子说那么多干啥,他就一个低级职业PHP黑,以前吹嘘node,node不行改吹嘘go,平时为了对付PHP还顺带吹嘘java
eechen
eechen

引用来自“lcccd”的评论

投反对票的都不玩了
https://wiki.php.net/rfc/jit
Include JIT into PHP 8? (50人赞成,2人反对)
Include JIT into PHP 7.4 (experimental)? (18人赞成,36人反对)
其中鸟哥laruence,JIT核心开发者dmitry,PHP之父rasmus,Zend公司创始人zeev,在两项投票中都投了赞成.

最新评论(65

左华栋
左华栋

引用来自“意简美”的评论

你如果觉得swoole复杂,使用https://github.com/lizhichao/one吧。
你会感觉和使用 thinkphp,laravel一样 简单快速。不用关心协程,连接池等等问题

引用来自“左华栋”的评论

挺不错的,如果再早两年,可能我们就选了。
当时面临最大的问题就是招人,好的laravel 招不到,swoole 更没人,大多水平偏低,培训班thinkphp一堆。

引用来自“hanchuha”的评论

艾玛,别提thinkphp了,我觉得就是因为thinkphp拉低了国内phper的整体水平线,本身就一垃圾,你不是业务都拿node跑么,怎么又参与php的骂战了,无阻塞I/O我觉得能用node还是用node,找适合的开发语言才是最好的选择,说实在的如果非要用php来解决I/O密集型场景,reactphp这个纯事件驱动型库更像node
之前其实考虑过 reactphp,但是太不好招人了。而且相关生态也少~
h
hanchuha

引用来自“意简美”的评论

你如果觉得swoole复杂,使用https://github.com/lizhichao/one吧。
你会感觉和使用 thinkphp,laravel一样 简单快速。不用关心协程,连接池等等问题

引用来自“左华栋”的评论

挺不错的,如果再早两年,可能我们就选了。
当时面临最大的问题就是招人,好的laravel 招不到,swoole 更没人,大多水平偏低,培训班thinkphp一堆。
艾玛,别提thinkphp了,我觉得就是因为thinkphp拉低了国内phper的整体水平线,本身就一垃圾,你不是业务都拿node跑么,怎么又参与php的骂战了,无阻塞I/O我觉得能用node还是用node,找适合的开发语言才是最好的选择,说实在的如果非要用php来解决I/O密集型场景,reactphp这个纯事件驱动型库更像node
J
John0King
欢迎php 加入.net , peachpie 你值得拥有, https://peachpie.io
左华栋
左华栋

引用来自“Darkest”的评论

好,PHP可以写游戏和客户端了,下一步再编译成wasm,统一移动端

引用来自“eechen”的评论

PHP的确可以开发多人在线游戏,但开发的是游戏服务器,而不是游戏客户端.
可以基于Swoole或WorkerMan来开发.

引用来自“Darkest”的评论

我这说的就是客户端,一秒钟最低60帧的游戏体验,没有jit真的会撑不住

引用来自“左华栋”的评论

没用,就算加了JIT ,php在脚本语言方面依然不如 lua 和 js 。
抛开生态不谈,JIT 需要长期,大量资金投入。zend 压根没这么多钱,不然也不会一个 JIT 搞5年

引用来自“slince91”的评论

大哥你不要胡扯了好吗,你做过测试吗就乱说,v8支持jit计算能力就很强?你用node和php做个冒泡排序,出结果了再来发言好吗
都9102年了还拿冒泡说事,内置函数有意思?去对比下 argon2 加密算法的 js 和 php 实现就什么都明白了。如果觉得不服的话,github 搜下 fib 吧。
左华栋
左华栋
都9102年了还拿冒泡说事,内置函数有意思?
去对比下 argon2 加密算法的 js 和 php 实现就什么都明白了。
如果觉得不服的话,github 搜下 fib 吧。
slince91
slince91

引用来自“Darkest”的评论

好,PHP可以写游戏和客户端了,下一步再编译成wasm,统一移动端

引用来自“eechen”的评论

PHP的确可以开发多人在线游戏,但开发的是游戏服务器,而不是游戏客户端.
可以基于Swoole或WorkerMan来开发.

引用来自“Darkest”的评论

我这说的就是客户端,一秒钟最低60帧的游戏体验,没有jit真的会撑不住

引用来自“左华栋”的评论

没用,就算加了JIT ,php在脚本语言方面依然不如 lua 和 js 。
抛开生态不谈,JIT 需要长期,大量资金投入。zend 压根没这么多钱,不然也不会一个 JIT 搞5年
大哥你不要胡扯了好吗,你做过测试吗就乱说,v8支持jit计算能力就很强?你用node和php做个冒泡排序,出结果了再来发言好吗
hsl727261250
hsl727261250
卧槽牛逼了, 很不错, 我选node.
久永
久永

引用来自“志田未来”的评论

@红薯 有bug 我把@左华栋加灰了,引用回复还能看到这傻逼发言啊,处理下。
看到就烦,天天php凉了,php就算没有jit也不会凉。
脑子有毛病,爱用用不用滚。
是啊,简单的就是屏蔽没有就不该有这人出现在自己的时间线中,仅此而已,非常明确的需求啊。
老查
还是要说,PHP的进化努力的不够快,已经跟不上大势了。
返回顶部
顶部
上海快3