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

php8.1 的多并发纤程

  •  
  •   zjsxwc ·
    zjsxwc · 301 天前 via Android · 1119 次点击
    这是一个创建于 301 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为 php8.1 开始支持完整的协程 fiber , php4.0 开始已经支持register_tick_function

    于是register_tick_function可以让 php 代码每执行一条语句就能回调到register_tick_function登记的回调函数里。

    于是利用register_tick_function的回调函数,回调一个协程的调度功能的函数,来调度协程,就能实现在 php 进程里同时并发运行多个协程,实现类似 golang 纤程的功能。

    当然和 golang 不能比,golang 可以把多个纤程分配在多个线程里,让一个线程并发执行多个纤程,而 php 不支持线程,只能在一个进程里同时并发运行多个纤程。

    这个 php 官方文档评论里的就给了个例子:

    https://www.php.net/manual/en/language.fibers.php#127282

    92B4C84F2B101CC025069115FF3C7F43_05dd5982c038aa2e4.png

    php 不能让操作系统调度线程,确实是个遗憾,但可并发执行的协程确实一定程度上弥补了这个遗憾。

    第 1 条附言  ·  301 天前
    golang 纤程 我是指 goroutine 。
    第 2 条附言  ·  301 天前
    linux 内核的高性能线程 thread 支持是托了 jvm 的福 ,2003 年前 linux 的 thread 性能弱且有数量限制,导致 jvm 多线程在 linux 上运行性能低下,托了 jvm 低性能的福,2003 年 ibm 与 redhat 的工程师给 linux 内核实现了 pthread 的高性能多线程 thread 支持。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5281 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:28 · PVG 09:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.