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

有人了解 PHP 官方目前正在讨论的 fiber-rfc 吗?

  •  
  •   Evilk · 2021-01-25 21:43:10 +08:00 · 8254 次点击
    这是一个创建于 1396 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题 最近有了解到这个Fiber-RFC

    如果合并进 php-src 底层直接支持异步或协程,类似 go 那样,会给 PHP 带来怎样的变化?

    有感兴趣的 phper,来聊聊吧

    49 条回复    2021-03-23 15:36:49 +08:00
    liuxu
        1
    liuxu  
       2021-01-25 21:46:13 +08:00
    早几年 7.0 就应该加上
    Mitt
        2
    Mitt  
       2021-01-25 21:49:56 +08:00   ❤️ 8
    异步 多线程 都不符合 PHP 的设计理念,一旦加入,大概率是改变编程习惯,这样的话 PHP 就会变成另一个语言了,所以要么是在原有的基础上适当改进加入,那这样大概率不痛不痒,要么就是完全改变 PHP 的运行方式,那这样不仅有破坏性改动,而且会大幅改变原有编程习惯,很多人会接受不了,PHP 的生命周期只到一次访问结束,这才是大问题,包括现有的 swoole 什么的,都极大破坏了原有编程习惯,或者这么说,能接受 swoole 的人一定可以换其他语言去做的更好,而接受不了其他语言的设计方式的人也不会接受 swoole 这种异步编程方式
    shoaly
        3
    shoaly  
       2021-01-25 22:03:53 +08:00
    @Mitt 我也赞成, php 的优势就是写起来直白, 顺手.... 需要协程的时候 转 go 就行了, go 和 php 互动一下就行了...

    不过从 php 官方的角度来说, 开发者可以不用, 但是不能没有, 不然老是在这几个[没有的功能点上] 被 go python 反复摩擦, 显得很弟弟
    alexkkaa
        4
    alexkkaa  
       2021-01-25 22:08:46 +08:00 via Android
    这种异步要想发展起来就得伤筋动骨般的对内置库做大量改动。 参考 c#,标准库异步无处不在。反观 py, 标准库不跟进根本就发展不起来
    sagaxu
        5
    sagaxu  
       2021-01-25 23:30:43 +08:00 via Android
    PHP 变了,已经不是那个简单易用随手可撸的 PHP 了,那我为什么不直接用 Go 甚至 C#呢?
    a632079
        6
    a632079  
       2021-01-25 23:35:17 +08:00   ❤️ 1
    首先,传统 PHPer 仍然借助的是 CGI/FPM 或者基于 Apache 的 mod_php 来使用 PHP 业务的. 这种模式下, PHP 是收到请求开始初始化,执行代码,请求结束,直接销毁. opcache(包括 preload) 等优化方案只是对常用代码编译为 opcode(可以理解为 VM 中间代码,在运行时可以由 Zend 引擎直接转换为机器码(跳过分析过程), 这就是提速的原因之一.
    PHP 8 引入了 JIT, 实际上是一个非常粗浅的 JIT(相比较 PyPy 和 V8), 而且受制于前述的生命周期,实际上的提升其实是非常有限的.
    终于到正题了.题主提到的异步或协程特性其实并不太适合前表的生命周期,加入这类特性其实不会对性能有太大的提升,反而提高了学习门槛,提高了优化难度. 简而概之,对于传统的 PHP 开发,可能收益并没有那么大,做代码优化还不如堆机器.
    这边提一句,如果真需要高性能 PHP 开发的话, 还是得回归 php cli 开发. 开发一个常驻内存的程序, 也就是目前 swoole 做的很成功的地方. 我相信如果 PHP 官方引入了异步,协程, 常驻类程序会收益匪浅.
    #2 说的很对, Swoole 这种基于 Cli 的开发模式并不是 PHP 社区的热点, 和大家印象里的 PHP 迥然不同, 能接受 Swoole, 为什么接受不了 Go(特性少,简单), node, Java 呢?
    liuxu
        7
    liuxu  
       2021-01-25 23:49:18 +08:00   ❤️ 1
    @Mitt 异步,多线程,都不符合 PHP 的设计理念,这个你是从哪得知的?还是你自己代表了 phper ?

    据我看源码,php 的语言设计,本身是建立在 zend 内核上的一层实现(虽然有人吐槽太依赖 zend 了),在它之上才是 fpm 和 cli 之类的 sapi,你说的设计理念是 fpm 这一种 sapi 的实现而已?怎么就反客为主说这就是 php 的设计理念了?
    mitu9527
        8
    mitu9527  
       2021-01-26 00:26:00 +08:00
    @Mitt PHP 以前没有,并不代表现在不能有,很多人都期望加入异步和常驻内存等特性,PHP 就应该加入,除非做不到。时代在变化,PHP 不变就会落伍。
    back0893
        9
    back0893  
       2021-01-26 00:30:28 +08:00
    不咋样
    那我为啥不换 go 或者 java
    另外。workerman 也活的好好的。多进程不错
    Mitt
        10
    Mitt  
       2021-01-26 00:30:44 +08:00
    @liuxu #6 不要过多关注底层设计,我们讨论的是语言层面,站在 PHP 开发者的角度去看这种改变你就知道异步、多线程为什么很难融入 PHP 了
    Mitt
        11
    Mitt  
       2021-01-26 00:43:53 +08:00
    @mitu9527 #7 并不是一昧的去增加新功能就能跟上时代了,就跟 PY2 和 PY3 一样,PHP 一旦正式加入异步、协程、多线程,如果处理不好,势必会出现大版本分裂,可能会有 90%的 PHP 网站停留在旧版上,甚至转向其他更合适的语言,这对 PHP 是致命的,因为 PHP 相较于其他语言来说在这方面并不具备重大优势,所以这些特性很可能只会存在于一种可有可无或者半支持的情况下,那么第三方库可能就不会积极去选择支持它,常驻内存带来的另一个弊端就是内存泄露,这是传统 phper 根本不会考虑的事情,现在要考虑内存泄露、并发抢占、文件重载问题等等,会引入一大笔学习成本,PHP 只会在对现有 phper 没有重大负担的前提下加入新特性,比如静态变量类型
    sunznx
        12
    sunznx  
       2021-01-26 01:28:52 +08:00   ❤️ 1
    @Mitt 你很强?什么时候轮得到你来说 phper 不会这些东西?
    icy37785
        13
    icy37785  
       2021-01-26 01:54:12 +08:00 via iPhone
    @sunznx 会的不都转 go 去了么。剩下的就是不会的了的呗。
    rqrq
        14
    rqrq  
       2021-01-26 06:48:32 +08:00   ❤️ 1
    我胡说八道一下:初期可以弄个并行函数,类似 swoole 的 go 方法,用来发邮件、写日志、网络通知这些旁路 io 操作。
    能实现这个那就真牛逼了。
    zjsxwc
        15
    zjsxwc  
       2021-01-26 08:10:42 +08:00 via Android
    挺好的,语言层面加入协程支持后,可以更简单地应对异步需求,不然只能手动 poll 来搞异步。
    RickyC
        16
    RickyC  
       2021-01-26 09:16:06 +08:00
    @sagaxu C#? 听说目前在网站领域, php 占比还是很高的? C#太少了吧
    jeristiano
        17
    jeristiano  
       2021-01-26 09:33:34 +08:00
    我昨天看了这个提案,它提供最小化的核心支持 php 拥有全栈协程和绿色线程的能力,它不是 swoole 那样的一个异步通信引擎。
    提案里说,异步非阻塞的能力会交个框架和其他的库,因此,这个提案并不会立刻为 php 带来协程工作流模式( go,swoole ),仅仅是协程的具体实现(fibers)
    hpu423
        18
    hpu423  
       2021-01-26 09:45:33 +08:00
    php,再不变,就真的是“世界上最好的语言了”
    Still4
        19
    Still4  
       2021-01-26 09:50:52 +08:00
    目前在用 zts,最难受的是上下文无法交互,开辟的子线程跟主线程内存隔离,虽然不会有并发读写的问题,但是也丢失了大量多线程的可用性
    limingxinleo
        20
    limingxinleo  
       2021-01-26 10:40:16 +08:00   ❤️ 3
    上面说学习 Swoole 不如转 Go Java Node 的,真的有点站着说话不腰疼。

    大多数写 PHP 的都是专科,搞 Java 的哪个不是本科起步,拿头去竞争么?

    另外,PHP+Swoole 在开发上,甩 Java Go 好几条街。我本人 Go Java PHP Node 都写,但还是 PHP 配合 Swoole 写着最舒服,性能也不差,为啥非要去转语言,搞的自己议价能力直接拦腰折断呢
    liuxu
        21
    liuxu  
       2021-01-26 10:46:33 +08:00
    @Mitt 站在 php 开发者角度,难在哪里?或者只是在你手里比较难
    lscexpress
        22
    lscexpress  
       2021-01-26 10:51:18 +08:00
    随便咯,官方出了我就试试,不出有这需求我就用 go
    FantaMole
        23
    FantaMole  
       2021-01-26 11:45:18 +08:00
    Who is the target audience for this feature?

    Fibers are an advanced feature that most users will not use directly. This feature is primarily targeted at library and framework authors to provide an event loop and an asynchronous programming API

    按这个 Q&A 的设想来看,即使引入了 fiber,对普通开发者的影响也不大,会有框架给出更简单易用的语法糖。我觉得主动尝试引入新特性对这个语言来说也是个好事吧,总比现在死而不僵要好
    hexiaolu
        24
    hexiaolu  
       2021-01-26 11:50:35 +08:00
    @limingxinleo 大多数写 PHP 的都是专科,搞 Java 的哪个不是本科起步,拿头去竞争么?
    说这话的有经过统计? 还是 我不要你觉得,我要我觉得???

    公司 php 主语言,本科生占 90%, 拿数据说话?????

    别吃屎都是 java 香好不?
    ben1024
        25
    ben1024  
       2021-01-26 12:20:28 +08:00
    @rqrq
    可以借助 guzzle 来实现,性能消耗略大,功能能实现
    limingxinleo
        26
    limingxinleo  
       2021-01-26 13:49:08 +08:00
    @hexiaolu 你说得对,我身边的 Javaer 和 PHPer 是这么分布的,没有任何的数据基础。

    我没有针对其他任何人,我只针对

    那些说写 PHP+Swoole 的,不如转 Go Java 的人
    Seanfuck
        27
    Seanfuck  
       2021-01-26 14:03:35 +08:00
    @limingxinleo
    @hexiaolu 我以前见过初中文化做 java 的,水平比本科 javaer 高。按神棍的说法,我国本科专科水平差别不大,都是欧洲 Hight school 水平,除了 top 几个都算不上 univesity 。我觉得勉强能算 college 吧。
    linoder
        28
    linoder  
       2021-01-26 14:10:27 +08:00
    @Mitt 异步 多线程 不早几年就支持了么?
    conkke
        29
    conkke  
       2021-01-26 17:52:33 +08:00
    @limingxinleo 好嘛,php 成专科限定了(哭笑不得)
    Varobjs
        30
    Varobjs  
       2021-01-26 17:54:21 +08:00
    @conkke 专科就专科吧,/滑稽,反正很多人眼中 985/211 之外都是专科吧,😄
    rohgeo
        31
    rohgeo  
       2021-01-26 18:04:20 +08:00
    只看学历的人,否定人在毕业后的一切学习
    sanmuisme
        32
    sanmuisme  
       2021-01-26 19:39:05 +08:00
    @limingxinleo 啥时候写 php 的就成专科了。。。
    GetMoney
        33
    GetMoney  
       2021-01-26 19:42:24 +08:00   ❤️ 1
    上面的都跑题了,我觉得需要加这些新特性,我用不用是我的事情,你 PHP 没有就是你 PHP 的事情。
    fxjson
        34
    fxjson  
       2021-01-26 19:58:20 +08:00
    这玩意官方实现后,swoole 是不是就凉了
    limingxinleo
        35
    limingxinleo  
       2021-01-26 20:12:32 +08:00
    看到这么多 at 我的,我就放心了
    ben1024
        36
    ben1024  
       2021-01-26 20:20:58 +08:00
    @fxjson
    官方实现后,swoole 应该会更好发展,fpm+cli 同时推进
    wangritian
        37
    wangritian  
       2021-01-27 10:14:52 +08:00
    异步就算了,协程是个好方向,不改变编程习惯,底层 IO 函数全协程化,对就是希望有 swoole 官方版
    b200806
        38
    b200806  
       2021-03-09 17:03:12 +08:00
    现在已经开始投票了
    wh1012023498
        39
    wh1012023498  
       2021-03-11 15:42:38 +08:00
    @fxjson 因为怕凉,所以基本上都投反对票了
    wh1012023498
        40
    wh1012023498  
       2021-03-11 15:43:19 +08:00
    @ben1024  然而并不是,看看都是谁在投反对票,有些人害怕呀~
    respect11
        41
    respect11  
       2021-03-12 10:15:21 +08:00
    好未来 都投了反对...
    jianjian714
        42
    jianjian714  
       2021-03-12 11:42:28 +08:00
    @respect11 好未来同学表示躺枪了。。。
    sorshion
        43
    sorshion  
       2021-03-12 11:42:36 +08:00
    zd04
        44
    zd04  
       2021-03-12 11:44:50 +08:00
    我支持
    pader
        45
    pader  
       2021-03-12 13:02:55 +08:00
    现在说改变很多人会接受不了,为什么不考虑不改变已经有很多人跑路转其它语言了呢? PHP 再不对这一块做出支持,很多人不用嘴巴说,他们已经用脚投票了。
    时代不同,PHP 一定要跨出这一步,否则未来是可以预见的。
    limingxinleo
        46
    limingxinleo  
       2021-03-12 18:21:12 +08:00
    今天被群里的小伙伴把我上面的言论翻出来了。。

    首先在这里先因为自己没有经过科学的统计,就信口胡说,向大家道歉。。

    -----------------

    我上面的言论,不是我说的,是狗说的

    旺旺...
    cokar
        47
    cokar  
       2021-03-16 22:28:43 +08:00
    为什么总说 PHP 搞协程不如用 Go ? PHP 那么好用,如果能实现协程,为什么还要转其它语言呢?
    charlie21
        48
    charlie21  
       2021-03-17 00:02:14 +08:00
    按照 PHP 的向前兼容性,如果加入肯定是完全新一套 API 的
    目前的用 PHP 标准库写的程序一般不常驻内存,从根本上杜绝了用户代码引起的内存泄露
    实际上这是其它语言应该借鉴 PHP 的地方 zhihu.com/question/68378258 # PHP 的语言设计上值得借鉴的地方
    goxxoo
        49
    goxxoo  
       2021-03-23 15:36:49 +08:00
    姓吴的在这里吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5309 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:29 · PVG 09:29 · LAX 17:29 · JFK 20:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.