V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zjsxwc
V2EX  ›  程序员

php8.1 的多并发纤程

  •  
  •   zjsxwc ·
    zjsxwc · Jul 1, 2023 via Android · 1735 views
    This topic created in 1037 days ago, the information mentioned may be changed or developed.

    因为 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 不能让操作系统调度线程,确实是个遗憾,但可并发执行的协程确实一定程度上弥补了这个遗憾。

    Supplement 1  ·  Jul 2, 2023
    golang 纤程 我是指 goroutine 。
    Supplement 2  ·  Jul 2, 2023
    linux 内核的高性能线程 thread 支持是托了 jvm 的福 ,2003 年前 linux 的 thread 性能弱且有数量限制,导致 jvm 多线程在 linux 上运行性能低下,托了 jvm 低性能的福,2003 年 ibm 与 redhat 的工程师给 linux 内核实现了 pthread 的高性能多线程 thread 支持。
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   829 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:19 · PVG 04:19 · LAX 13:19 · JFK 16:19
    ♥ Do have faith in what you're doing.