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 开发容易出现的内存管理、溢出等问题

实现细节

预计的发布节点

11229 次点击
所在节点    PHP
35 条回复
shisang
2019-02-01 12:09:41 +08:00
还不如来一个官方替代 fpm 的 server 来的实用
gouchaoer
2019-02-01 13:57:51 +08:00
@shisang fpm 你有什么不满意的地方么?而且 fpm 早被官方收编了
sheeta
2019-02-01 14:02:06 +08:00
nice
gouchaoer
2019-02-01 14:04:16 +08:00
7.4 的 typed 类成员要来了,jit 也要 来了,我看再加入个 typed 局部变量就和写 java 差不多了
希望不要重蹈 php7.2 的 count 那种 break BC 的覆辙
vus520
2019-02-01 14:06:14 +08:00
php 现在复杂得一逼,跟 java 还有啥区别
hoyixi
2019-02-01 14:10:14 +08:00
@vus520

感觉以后编程语言都会演化成差不多的样子
realpg
2019-02-01 14:22:02 +08:00
搞的这么复杂 还不如去 java

本来 PHP 的定位和分工就是很明确的,大部分 PHP 项目都是 IO 才是性能瓶颈
非得把一个好好的轻量 web 脚本语言搞的无所不能有啥用
jfcherng
2019-02-01 14:43:58 +08:00
JIT 對 web 領域的提升非常有限(絕大部分的 web 應用都不是“計算繁重”的類型,見原文的 wordpress benchmark 提升 10%不到)。

但 JIT 開啟了將 PHP 用在其他領域的可能性。Reddit 上也有人看了這個 RFC 之後,分享用 PHP 寫日常腳本(類似 shell script, python )的心得,不過 PHP 不是系統默認安裝的稍嫌麻煩。
gouchaoer2
2019-02-01 14:46:48 +08:00
@realpg
@jfcherng
现在 swoole 走 golang 那种纯的协程之后,io 就不再是瓶颈了,于是 cpu 就成了瓶颈了。。。不过这就抛弃了 fpm
也抛弃了 fpm 下面的很多生态和优点,见仁见智吧
oneonesv
2019-02-01 14:48:01 +08:00
@jfcherng 大部分中小公司都在直接用 PHP 做计算的
oneonesv
2019-02-01 14:49:33 +08:00
应该是起步用 PHP 技术栈的中小公司
gouchaoer2
2019-02-01 14:51:17 +08:00
@jfcherng 我也分享一个我日常用 php 写脚本的心得:

不习惯写 shell 的可以这样写:

```
#!/bin/bash
php -v > /dev/null 2>&1
if [ $? -ne 0 ];then
echo "Please install php and ensure 'php -v' output version info in command line"
echo "For ubuntu/debian, 'sudo apt-get install php' or 'sudo apt-get install php5' for old distribution"
echo "For centos/RHEL, 'sudo yum install php' "
fi

#php script
php<<'PHPSCRIPT'
<?php

chdir("..");
echo getcwd();
exec("command 2>&1", $o, $r);//这里 exec 只保存 stdout 而不保存 stderr,所以需要把 stderr 重定向到 stdout
if ($r!=0)
{
echo "command return code:{$r}, output:" . var_export($o, true);
exit();
}
PHPSCRIPT
```
fanpei0121
2019-02-01 14:51:18 +08:00
php 能做更多事情也是好事
gouchaoer2
2019-02-01 14:53:06 +08:00
shell 的语法实在是太暧昧了,经常看着看着不知道这是啥意思,弄个 bashdb 在那里 debug。。。做一件事有 N 种方法
ihipop
2019-02-01 14:55:00 +08:00
@realpg 关于 IO 的部分,你目前说的说的是对的,但是其实已经有很好的方向而且现在我也实践在项目内了,那就是 Swoole 的协程,现在 swoole5 预备开始全面转向协程抛弃一部回调了,IO 密集操作的瓶颈变成 CPU 的瓶颈了。这部分的提升是很有意义的。

@jfcherng 你还停留在 `PHP`=`传统 WEB` 的思维上,实际上你说的传统 web 的性能问题,有一部分就和上面我说的那个问题相关,而且实际上现在 PHP 能干的好的事情不只是`传统 WEB`,即使是传统 web,用不一样的方式去提供服务(比如 Swoole 那种常驻方式),性能也能有很大的提升(具体可以看下不带业务的压测),社会上目前关于 PHP 和 WEB 的刻板印象太深刻了。
orangeade
2019-02-01 14:55:28 +08:00
脚本我就用 python 了,
不过感觉 cpython 更需要优化解释器性能,语言特性差不多够用就行了
jfcherng
2019-02-01 15:07:01 +08:00
@ihipop 據我所知,PHP 目前的 JIT 只對“數學運算”有明顯的提升,也就是 RFC 裡那個做一堆加減乘除的 benchmark 以及幾年前忘記哪來的有個計算數學碎形的 benchmark。file IO 應該和 JIT 的關係不大?

我感覺可能有用的是像做 PHP machine learning (不過 github 上有個項目已經在 port tensorflow 的 API 到 PHP 的 C 拓展上了)這種與數學計算高度相關的事情,從 JIT 獲得的好處是極大的。但不管怎樣,就算是做 i++ ,也是要變快了,哈哈 😄
ihipop
2019-02-01 15:17:21 +08:00
@jfcherng 不能因为目前的 JIT 只能做到 `對“數學運算”有明顯的提升` 而不去继续发展 JIT,是吧?就好像小孩子学步一开始只能爬行,就不去让她继续学步走路是吧。JIT 解决的是 CPU 的运算速度问题,而现在 Swoole 全力发力的 Coroutine 是解决 IO 密集问题,这两个解决以后,语言层面影响性能的两大瓶颈就没有了。生态起来以后 @gouchaoer2 说的那种生态问题会慢慢好起来的。甚至一些现有的为老生态设计的包,如果遵循一定的设计理念(比如 Di ),拿来改造适应协程(现在 Swoole4 下面的一些协程还有一些限制,需要专门设计)是很快很方便的。
realpg
2019-02-01 15:39:52 +08:00
@ihipop #15
大概我表述的不太明确,您可能理解错了我的意思

非得把 PHP 一步步改造成 java 那样,为什么项目选型一开始不选择 java

把自己优势的范围强化到极致,而不是天天盯着别的语言和别的范围,让自己包治百病,才是 php 的未来

PHP 项目并不是一个上市公司,搞的像上市公司似的总去研究扩张速度,扩张加速度,只能让他更快的失去用户
guanhui07
2019-02-01 15:52:24 +08:00
赞个

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

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

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

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

© 2021 V2EX