首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

php 的 jit 真的要来了

  •  
  •   gouchaoer · 2016-12-13 22:04:05 +08:00用 Android 发布 · 13489 次点击
    这是一个创建于 794 天前的主题,其中的信息可能已经有所发展或是发生改变。
    来源:
    https://www.oschina.net/question/2896879_2212316

    jit 能在 php7.2 放出来么?
    以及鸟哥委婉的吐槽了 Laravel ,还有很多干货,说到心坎里去了。
    83 回复  |  直到 2018-10-10 15:13:06 +08:00
        1
    HuangLibo   2016-12-13 22:09:27 +08:00
        2
    Scholer   2016-12-13 22:12:02 +08:00   ♥ 2
    从哪儿解读出来吐槽了 Laravel ?
        3
    ykjsw   2016-12-13 22:17:18 +08:00
    说的挺好的, PHP 还是简单点好。
        4
    orvice   2016-12-13 22:54:26 +08:00   ♥ 1
    @Scholer ,比如一些很优雅的框架。有些框架我自己看半天也会觉得还挺复杂的,学起来费劲。

    Laravel 不是说自己优雅吗。
        5
    Scholer   2016-12-13 23:07:32 +08:00
    @orvice 优雅的框架是说明 PHP 也不简单,后面断句了。本身人家也没影射什么,没必要按照自己的意愿去解读。
    反正我一直觉得 Laravel 挺简单的,比大多数框架都简单。
        6
    anewg   2016-12-13 23:10:55 +08:00
    稍微熟悉 php 的人都会对框架源码或自己实现框架感兴趣,刚碰到 Laravel 这种用的组件多,抽象层次多的。对比其它看一眼目录结构就能快速定位的框架, Laravel 算是复杂了。

    当然了,排除源码层面这点,用起来舒服就好。
        7
    orvice   2016-12-13 23:21:47 +08:00
    @Scholer 是简单,但是设计算复杂了。

    @anewg 我怎么觉得 Laravel 目录结构分类挺细挺好的啊...
        8
    echo111222   2016-12-13 23:25:20 +08:00 via Android
    这就尴尬了
        9
    jhdxr   2016-12-14 00:25:59 +08:00
    如果几个月能能合并到 master 的话那么 7.2 应该是能赶上的,毕竟现在半年一个版本。

    至于吐槽 laravel ,哪怕点名吐槽又如何呢? 7.1 里通过的 rfc 大部分不也投的是反对么。。。
        10
    dtfm   2016-12-14 00:28:23 +08:00
    PHP 再这样搞下去,让 Python 很尴尬啊
        11
    sagaxu   2016-12-14 00:48:36 +08:00 via Android   ♥ 1
    @dtfm 如果 php 框架都抛弃 fpm 用 cli 跑,性能上应该可以碾压 pure python 了。不过 Python 的库比 PHP 更全,比如说机器学习或者科学计算和统计,甚至还有 micropython 这种可以用 python 驱动的单片机。
        12
    q397064399   2016-12-14 06:05:03 +08:00
    都要 JIT 了,为什么不用 Java
        13
    chenset   2016-12-14 08:44:00 +08:00
    @q397064399 都编译了, 为什么不用 C
        14
    araraloren   2016-12-14 08:47:09 +08:00
    @q397064399 。。 php 就是 php , 有了 JIT ,这 和 Java 又有什么关系呢。。
        15
    q397064399   2016-12-14 08:57:44 +08:00
    @araraloren
    你这是抬杠,没心情回复
    @chenset
    PHP Java 都有各自的领域, PHP 最初的设计,就不是针对 大规模 高并发 集群 等玩意的

    JIT 是很久以前 JVM 标准下就已经成熟的技术,如果你真的需要 JIT 这种针对性能优化的玩意,直接用 Java 得了,

    选 PHP 大多是针对业务需求 都是考虑 PHP 的 快速开发,动态类型等优点,

    在现有的机器性能下,如果你的 PHP 做的业务 到后面都需要 JIT 来优化性能的时候,公司架构师的技术选型
    肯定会直接切到 Java ,而不是继续使用 PHP
        16
    ragnaroks   2016-12-14 09:01:51 +08:00
    @q397064399 https://www.taobao.com/index.php 淘宝的并发不小吧


    虽然我本身用.net,不过我现在越来越觉得大公司之所以使用 java/.net/python,并不是这些语言有多好,而是高层就会这几种.
        17
    setonfocus   2016-12-14 09:07:31 +08:00
    是的, php 核心开发组成员里已经有人证实 了
    http://weibo.com/ttarticle/p/show?id=2309404052280251914593
        18
    q397064399   2016-12-14 09:09:29 +08:00
    @ragnaroks 不说了,你去淘宝看下后台 阿里的 Java 系 是有多牛逼
        19
    likezun   2016-12-14 09:10:19 +08:00
    @ragnaroks 对头, 高层技术人员喜欢用他们没有过的新东西或语言, 程序员的通病!
        20
    likezun   2016-12-14 09:10:57 +08:00
    Laravel 都嫌复杂的话,你叫我大 Symfony 怎么办?
        21
    setonfocus   2016-12-14 09:12:45 +08:00   ♥ 1
    在国外 php 的性能问题得不到重视,毕竟他们的网站才多少并发,而我们国家的人口基数大,并发自然也比国外高很多,自然要考虑到性能方面。
        22
    q397064399   2016-12-14 09:15:19 +08:00
    @ragnaroks 语言本身就没有好坏,
    大家用不用 针对某个领域,只取决两点
    1.生态 2.生态

    没有生态环境的语言,再牛逼也只是牛逼而已,
    Java 那么蛋疼的泛型,不还是有人用么?
    JDK7 里面 要实现很多高级语言特性,十分繁琐,大家不还是忍了
    大家为什么要忍 Java ,因为 Java 轮子多啊,满大街的 Java 程序员 便宜啊

    PHP 那么蛋疼的运行时环境,,但是在针对某些业务场景, PHP 有奇效啊,开发上手速度贼快,
    我不用 PHP 我傻啊
        23
    gouchaoer   2016-12-14 09:18:01 +08:00 via Android
    @q397064399 java 是静态类型语言,和脚本语言没法比的, jit 实现上也一样。另外社区生态 java 也是没的说,但是你的观点不对。。。。对性能的追求是没有止境的,况且这些提升对用户来说是透明的。。。至于 php 不适合集群高并发,这是错误的。。。只是 php 的性能比 java 差而以, php 写起来快部署简单耐艹,二者需要一个平衡。。。大厂继续用 php 支撑业务的又不是没有,而且纠结用啥真的没意义,后端 crud 根本不是难点。。。
        24
    liuzelei   2016-12-14 09:21:19 +08:00
    都什么年代了还有人认为一个 stack 能够通吃所有业务。看到淘宝首页是 php 的扩展名真以为淘宝是 php 做的么?
        25
    q397064399   2016-12-14 09:22:39 +08:00
    @setonfocus
    国内 用 Java ,企业领域用的很多,无非两点, Java 成熟的早,企业框架发布的早, PHP 还在玩泥巴的时候
    Java 已经针对企业 BS 应用开发 提供了一套完善的解决方案, 而且很多 企业应用 业务逻辑 十分繁琐,架构十分繁杂, PHP 早期还没有面向对象等特性,

    后来的互联网浪潮,小型软件 居多
    php 的轻量 动态类型的优点就出来了, Java 像 Struts2 等重量级别的框架 已经不适应这个时代了,但轻量级的框架 像 SpringMVC 之类的还是很符合时代特性的
        26
    gouchaoer   2016-12-14 09:22:39 +08:00 via Android
    @q397064399 身在福中不知福, jvm 和 java 的生态好我也同意,但是 java 语言本身我认为做的很好了,规规矩矩的够用了。
        27
    ragnaroks   2016-12-14 09:25:19 +08:00
    @liuzelei 看到淘宝首页是 php 的扩展名就以为淘宝是 php 做的的那种人肯定是没得救了的,不过恰好淘宝前台用了 php,有趣啊
        28
    q397064399   2016-12-14 09:25:43 +08:00
    @gouchaoer 没有,只是业务需求真要到代码执行速度层面上来优化性能的时候,直接 Java 上,来得实在点
    @liuzelei Agree
        29
    setonfocus   2016-12-14 09:26:24 +08:00
    @q397064399 其实政府,银行才是 java 大户
        30
    ragnaroks   2016-12-14 09:27:10 +08:00
    @q397064399 我给出淘宝使用 php 是想说明,php 虽然性能不如.net,但是还是能应对大并发的,就算淘宝不够看,那 fb 总算大佬了吧
        31
    ragnaroks   2016-12-14 09:28:30 +08:00
    @likezun 这种情况之前看 BA 的员工在 b 乎都有吐槽,但基本没见过鹅厂的人抱怨,看起来鹅厂内部很自由?
        32
    hronro   2016-12-14 09:28:44 +08:00
    @ragnaroks 淘宝不是从 php 切到 nodejs 了么
        33
    ragnaroks   2016-12-14 09:32:07 +08:00
    @q397064399 语言本身确实没有好坏,黑 java 的那么多,也说明了用 java 的人多,但是 php 追求性能并无不妥,换句话说,java 那么好用了,为什么还是有人要学 C#,java 能做 web 也能做 desktop.
        34
    ragnaroks   2016-12-14 09:36:38 +08:00
    @hronro 没有吧,你指哪个部分?
        35
    tabris17   2016-12-14 09:38:34 +08:00
    啥时候能出个官方的 reactor 框架
        36
    levn   2016-12-14 09:40:48 +08:00
    还以为撕点会停在 laravel 上呢
    我真是太年轻了
        37
    pein   2016-12-14 09:57:05 +08:00
    @HuangLibo 机智啊,不过应该没人买吧,目测是交学费了。
        38
    defclass   2016-12-14 09:59:02 +08:00
    语言不就是, 英国人说英语好, 法国人说法语, 中国人说中文好? 有啥好争的
        39
    fatedier   2016-12-14 10:01:57 +08:00
    @ragnaroks 要怎么看出一个网站是否用了 php ? index.php 可以访问不能代表什么吧,也许只是匹配了路由规则。
        40
    sagaxu   2016-12-14 10:06:00 +08:00
    @q397064399 历史遗留代码,说换 java 就能换? 有了 php7+jit ,几百台规模的部署,可以减少到几十台,每年省百万。
        41
    ragnaroks   2016-12-14 10:09:39 +08:00
    @fatedier 直接问员工啊...难道要像楼上那样靠猜的?
        42
    reeco   2016-12-14 10:14:39 +08:00
    @ragnaroks 淘宝首页早就不是 php ,后端全线 java
        43
    ragnaroks   2016-12-14 10:19:00 +08:00
    @reeco 淘宝很早就后端 java 了,不过淘宝首页早就不是 php 是从哪打听到的?
        44
    type   2016-12-14 10:27:13 +08:00
    都要 JIT 了,为什么不用 Java , , ,都编译了, 为什么不用 C

    -----
    各种撕 B , 好无聊。
        45
    ylsc633   2016-12-14 10:29:32 +08:00   ♥ 2
    JIT 我不评论,因为不知道是啥...特别百科了一把...就不评论了

    不多 laravel,难道只有我 这个菜鸟觉得, laravel 用起来很简单,而且 有助于我 代码质量 和 规范的吗?

    举个栗子吧.....记得国内入门框架都是用 TP,一个分页写上我一堆代码,laravel 两三行搞定! 不挺好的嘛....

    明明要 拔起一颗钉子, 有锤子你不用,嫌他重,自己用木头去撬...那也没办法..木头确实轻...

    不过对于高级的 拍簧片攻城狮 ,他们的感受我就不知道了... 毕竟我还在菜鸟级混...
        46
    ylsc633   2016-12-14 10:30:17 +08:00
    尼玛,一行一个错别字... 怪 linux 上的 搜狗输入法吧.....
        47
    reeco   2016-12-14 10:33:37 +08:00
        48
    77alex   2016-12-14 10:34:21 +08:00
    @fatedier 淘宝搜索页面,源代码中有 Yii 关键字
        49
    77alex   2016-12-14 10:35:55 +08:00
    @ylsc633 哈哈 ,让我想到了紫光
        50
    ragnaroks   2016-12-14 10:40:08 +08:00
    @reeco 我看完了,看来可能是我信息落后了,晚上有时间再去核实一下.不过淘宝首页到现在也仅做了 /index.php 的路由,是故意的?
        51
    ragnaroks   2016-12-14 10:46:02 +08:00
    @77alex (<!--<?php Yii::app()->wm->runWidget('debuginfo') ?>-->)这个?
    除此之外还有:
    ```
    <p>
    <a href="//www.taobao.com/about">关于淘宝</a>
    <a href="//www.taobao.com/about/partners.php">合作伙伴</a>
    <a href="//pro.taobao.com">营销中心</a>
    <a href="http://jubao.alibaba.com">廉正举报</a>
    <a href="//service.taobao.com/support/main/service_route.htm">联系客服</a>
    <a href="//open.taobao.com">开放平台</a>
    <a href="//www.taobao.com/about/join.php">诚征英才</a>
    <a href="//www.taobao.com/about/contact.php">联系我们</a>
    <a href="//www.taobao.com/sitemap.php">网站地图</a>
    <a href="//www.taobao.com/go/chn/tb-fp/2014/law.php">法律声明</a>
    <em>&copy; 2003-2016 Taobao.com 版权所有</em>
    </p>
    ```
    https://life.taobao.com/market/sdmjf2011.php
    等等...
    上面那篇文章也仅仅提到了"淘宝首页".

    其实说这么多,php 作为 web 开发肯定是合适的,在此之上提高性能有何不妥?
    如果哪天宇宙第一 IDE 原生支持 PHP,说不定我都会把现有的.net 项目用 php 重写了
        52
    Balthild   2016-12-14 10:51:15 +08:00 via Android
    @q397064399 為什麼一定要換呢
        53
    cnqncom   2016-12-14 10:52:33 +08:00
    喜欢 PHP ,期待 PHP 成为第一流行语言!!!!!
        54
    yoke123   2016-12-14 11:06:57 +08:00
    PHP 是世界上最好的语言~
        55
    1023400273   2016-12-14 11:24:56 +08:00
    为什么要 jit ?
        56
    5yesan   2016-12-14 11:37:55 +08:00
    听说越来越重了,虽然我也没用过 哈哈哈
        57
    usedname   2016-12-14 11:51:55 +08:00
    我就想问下 以及鸟哥委婉的吐槽了 Laravel 楼主是怎么推断的?还是楼主先入为主?
        58
    barbery   2016-12-14 11:55:17 +08:00
    为什么要吐槽 laravel ?大公司追求高性能,小公司追求高开发效率,不同的场景有不同的需求,这不是很正常么?
        59
    elarity   2016-12-14 12:00:21 +08:00
    @q397064399 都有大众汽车了,还要啥奔驰。都有汇编语言,还要啥别的语言。
        60
    Actrace   2016-12-14 12:26:35 +08:00
    @sagaxu 作为一个长期使用 PHP 写 CLI 程序的人必须站出来说一下, PHP 在 CLI 模式下内存是个问题。目前似乎还不会主动收缩用于内存分配的链表(没看源码,所以只是猜测)。另外还存在第三方组件的内存泄漏问题。

    虽然并不影响 CLI 程序发挥效果,大不了就重启进程呗。
        61
    Jakesoft   2016-12-14 12:38:41 +08:00
    我喜欢的
    乐队是 muse, pulp,他们在国内
    都不火
    亦如我写代码用
    php,它也不是世界上
    最好的语言
    可是有什么能挡住
    我对生活
    的热情呢?
        62
    quericy   2016-12-14 12:52:36 +08:00
    PHP 最初的设计如何并没有关联吧,每个语言都是在发展的,互联网的环境也是在变的.PHP 最初设计的时候,互联网的规模和并发数和现在能比么?语言随着时代的变化而跟进有什么不妥?

    就如同加入可选的类型系统,可以让 PHP 开发者更加没有选择 Hack 的理由一样,
    当 PHP 的业务大到需要 JIT 优化性能的时候,如果这个时候 PHP 已经有了 JIT,公司还有什么理由付出重构的成本来切到 Java?
        63
    quericy   2016-12-14 12:53:02 +08:00
    @q397064399 PHP 最初的设计如何并没有关联吧,每个语言都是在发展的,互联网的环境也是在变的.PHP 最初设计的时候,互联网的规模和并发数和现在能比么?语言随着时代的变化而跟进有什么不妥?

    就如同加入可选的类型系统,可以让 PHP 开发者更加没有选择 Hack 的理由一样,
    当 PHP 的业务大到需要 JIT 优化性能的时候,如果这个时候 PHP 已经有了 JIT,公司还有什么理由付出重构的成本来切到 Java?
        64
    sumuu   2016-12-14 13:01:52 +08:00
    ```
    某女:你能让这个论坛的人都吵起来,我今晚就跟你走。
    某软件工程师: PHP 是最好的语言!
    某论坛真的就炸锅了,各种吵架……
    某女:服了你了,我们走吧,你想干啥都行。
    某软件工程师:今天不行,我一定要说服他们, PHP 必须是最好的语言……

    ```

    还是这个笑话!
        65
    gouchaoer   2016-12-14 13:12:23 +08:00 via Android
    @Actrace 我用 php-cli 循环 3400w 次往 redis 里面插数据,内存泄露退出过,不知道是第三方库的锅还是扩展的锅。。。。我基本上也是写 php-cli ,别的情况下 php-cli 倒是很稳定,我 win 下 php-cli 几个月的跑也没问题。。。链表你是说 array 么?这个是基本数据结构不会有问题的
        66
    Actrace   2016-12-14 15:31:47 +08:00
    @gouchaoer
    不是指 Array 类型的实现。按照之前看的鸟哥关于 PHP 源码对动态数据类型实现的一些介绍, Hashtable 会自动做扩张处理,但是有没有回缩就不知道了。即使不存储数据,空的 Hashtable 也会占用不少的数据,特别是大量创建并销毁变量的情况下。
    因为之前写过的 CLI 业务程序占用过高达 GB 级的内存,所以对这个现象比较在意(虽然后来也是通过重启进程来释放资源)。

    PHP 编写的 CLI 程序其实本质上和 C 写的程序并没有区别。稳定性也不用担心。

    主要是第三方扩展是一个很大的不确定因素,特别是之前用 pthreads 库,各种退出。现在基本不考虑第三方扩展了。
        67
    ids   2016-12-14 15:48:33 +08:00 via Android
        68
    gouchaoer   2016-12-14 15:49:32 +08:00
    @Actrace GB 绝对是内存泄漏(第三方扩展泄漏,第三方库泄漏,或者你自己存了变量没释放),第三方扩展也分稳定和不稳定的, krakjoe 维护的 apc 、 pthreads 都是那种不稳定的,没必要一刀切
        69
    Actrace   2016-12-14 16:00:04 +08:00
    @gouchaoer 额,泄露不是内存占用大的主因。一部分内容(比较大的数据)确实是需要存入内存。我的意思是在频繁创建并销毁变量之后,用于存储这些变量的 Hashtable 只扩张不收缩(猜测),结果是即使销毁了这些变量也没有彻底回收掉消费的内存。

    另外 curl 的内存泄漏也是一个坑,直到现在还没修。
        70
    Dlad   2016-12-14 16:03:23 +08:00   ♥ 1
    论性能,我查到的 benchmark 都证明 PHP 干不过 JAVA.
    不过目前这个阶段, WEB 领域, JAVA 能干的 PHP 也都能干。

    淘宝的案例,只看当下,蜻蜓点水说那么两句,这是孤立的看问题,没有触及实质。
    淘宝的技术栈选择,跟其业务规模发展密不可分,是个螺旋上升的过程。

    我前几个月写了一篇文章,论证了为什么说 PHP 目前还是一门有生命力的语言:
    https://wobu2.com/2016/05/09/php-is-not-the-best-language-md/
        71
    gouchaoer   2016-12-14 16:23:56 +08:00
    @Actrace 每个 array 或者 object 变量都是单独的 hashtable ,变量超出作用域了肯定回收了,所以说你的猜测是不存在的。加载了大量 object 情况下内存变大是很正常的,比如 composer 安装一个库动则几百 M 上 G 。

    至于 curl 扩展内存泄漏,我用的 Guzzle ,底层包装的就是 libcurl 扩展,我每个 php 进程会发起几千上万次 http 请求我并没有观测到泄漏,所以你如果观测到泄漏把代码样本贴出来,不可能不修的
        72
    sagaxu   2016-12-14 18:06:27 +08:00
    @gouchaoer 5.3 以前的 php 没有 gc ,所以循环引用会导致内存泄露, 5.3 之后,没关闭 gc 的话,合适的时机会释放内存的,不过也不保证短时间内触发,跟 java 一样,系统决定该不该触发。加上 php 很多扩展都是 C 写的,质量也良莠不齐, cli 模式下有泄露也是很常见的,不像 Java 那样可控。
        73
    gouchaoer   2016-12-14 18:34:12 +08:00 via Android
    @sagaxu php 的垃圾回收指的是检测循环引用的那个算法, php 本质上还是基于计数引用的简单垃圾回收,这和 jvm 不太一样。。。而且触发条件也很明确,性能在非极端情况下影响不大: http://m.weibo.cn/1170999921/3783767585644423?sourceType=sms&from=1067295010&wm=2468_1001
        74
    sagaxu   2016-12-14 19:23:51 +08:00 via Android
    @gouchaoer 本质上没什么不同,都是系统自身决定是否需要来一发 gc ,正常代码逻辑中,无法准确预测下一发 gc 什么时候发生。细抠的话,光 oracle 一种 jvm 就有 4 种常用 gc ,每种 gc 又有参数控制和运行时环境输入值。从功能和成熟度比较, php 的 gc 只是个小玩具。
        75
    solaro   2016-12-15 09:43:46 +08:00
    啧啧啧,
    @setonfocus 给你点赞,什么东西到我大天朝,都得变样。我大天朝就是新技术的试验田。
        76
    jsq2627   2016-12-15 14:24:03 +08:00 via iPhone
    有点惊讶 php 竟然还没有 jit
        77
    gouchaoer   2016-12-15 14:44:52 +08:00 via Android   ♥ 1
    @jsq2627 php 的 jit 在 5.x 时代就做了尝试,虽然在 cpu 密集 benchmark 上提高巨大,但是在 wordpress 之类的真实场景下看不到提升,所以一直没并入分支,这次是真实观察到提升后的结果。。。
        78
    ericgui   2016-12-16 00:28:15 +08:00
    @q397064399 估计上 JIT 是为了和 HHVM 竞争。
        79
    mingyun   2016-12-17 22:29:21 +08:00
    laravel 多优雅
        80
    huigeer   2016-12-19 19:17:54 +08:00
    php7.2 的 opcache 扩展还用不了啊, 用不了 jit
        81
    terrywater   2018-01-23 15:22:49 +08:00
    @Scholer 有啊,吐槽 laravel 仔细看:

    回过头来说,你说 PHP 简单吧它也不简单,PHP 相关的东西现在也有很多,比如一些很优雅的框架。有些框架我自己看半天也会觉得还挺复杂的,学起来费劲。
        82
    resturlaub   330 天前
    提问是: ”还有种说法就是 PHP 学习起来特别简单,不利于展示个人能力,对此怎么看?“

    回答是: "回过头来说,你说 PHP 简单吧它也不简单,PHP 相关的东西现在也有很多,比如一些很优雅的框架。有些框架我自己看半天也会觉得还挺复杂的,学起来费劲。"

    这里表达的是 php 有些学起来有时候也并不简单, 也没有说不简单不好啊,php 也能强大到实现一些复杂的很优雅的框架,还是很考验个人能力的。
        83
    wo642436249   129 天前
    我想知道有没有出来?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2456 人在线   最高记录 4346   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 08:56 · PVG 16:56 · LAX 00:56 · JFK 03:56
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1