PHP 真正异步编程即将到来 首个 alpha 版本已经发布

最新进展

TrueAsync RFC 发布后,PHP 异步编程领域迎来了不少变化。现在扩展的首个 alpha 版本已经发布,官方的核心变更 RFC 也正式公布,是时候看看这个项目的最新动态了。

为什么 RFC 还没投票?

前车之鉴

开发团队翻遍了其他编程语言的文档、论坛讨论和工作组记录,发现了一个有趣的现象:到目前为止,还没有哪门语言能在第一次尝试时就搞定异步 API 设计。

这不仅仅是因为技术复杂,更关键的是那些看起来很美好的方案,在实际使用中往往会踩坑。

不能急于求成

就算有一堆顶级专家,第一次设计也很可能有问题。这就像《人月神话》里说的"做一个扔一个",所以开发团队觉得匆忙推 RFC 肯定不是好主意。

新策略:先试再说

实验驱动开发 PHP 社区和核心团队想出了一个更靠谱的办法:先发布实验版本让大家试用,收集反馈后再敲定 RFC。

具体来说就是:

  1. 让开发者先在实验环境下体验 PHP 异步功能
  2. 等收集到足够的使用经验后,再最终确定 RFC 代码库分离 为了支持这个策略,开发工作拆分成了两个独立的仓库(https://github.com/true-async):

• PHP 核心引擎 API • 具体实现异步功能的扩展 这样做的好处是,PHP 核心可以独立演进,不用等异步功能的具体实现完全确定。即使 RFC 还在讨论,开发也能继续推进。

RFC 现状和计划

专门的引擎 RFC 现在有个专门针对核心引擎改动的 RFC: https://wiki.php.net/rfc/true_async_engine_api

如果这个 RFC 通过了,PHP 8.5 就会内置现在 TrueAsync 扩展里的所有核心功能。

现在就能试

不想等正式版本的话,现在就可以体验:

• Docker 方式:https://github.com/true-async/php-async/blob/main/Dockerfile • Windows 版本(快发布了) TrueAsync 扩展技术细节 技术栈 TrueAsync 扩展基于这些技术:

• LibUV 1.44+:负责高性能事件循环 • PHP Fibers:用 C 代码实现协程

核心特性

对现有代码友好

通过 Fibers,TrueAsync 做到了对现有代码零破坏。你可以在任何地方调用 spawn,甚至在 register_shutdown_function() 里(虽然不太推荐),普通函数该怎么工作还怎么工作。

最重要的是:没有函数着色问题。

调度算法优化

新的调度算法有这些改进:

• 上下文切换减少一半 • 协程可以直接跳转,哪怕在 C 代码深处 • 执行流程控制更灵活,想什么时候中断恢复都行

函数自动适配

TrueAsync 对现有 PHP 函数做了智能适配。比如调用 sleep() 时,系统会自动切换协程,这个过程对开发者透明。

当然,如果你想手动控制,可以用 Async\suspend() 函数。

功能现状

已支持的函数

目前已经适配了很多 PHP 内置函数,完整列表在这里: https://github.com/true-async/php-async?tab=readme-ov-file#adapted-php-functions

连 ob_start() 这种复杂函数都支持了,能正确处理协程切换,安全地并发处理不同函数的输出。

实用性如何

现有功能已经够用来构建实际的异步应用了,给 PHP 开发者提供了一个尝试异步编程的机会。

这个项目的意义

TrueAsync 算是 PHP 异步编程的一个重要转折点。通过"先试后定"的策略,实现了:

• 降低风险:用实际使用来验证设计是否合理 • 社区参与:让开发者早期就能参与测试和反馈 • 持续改进:根据实际需求优化 API 设计 • 平稳过渡:确保最终方案稳定可用 虽然这样做会拖长开发周期,但能为 PHP 生态提供一个更成熟可靠的异步编程方案。

总结

TrueAsync 项目展示了现代软件开发中"实验驱动设计"的价值。让开发者提前体验和测试新功能,PHP 社区正在为异步编程的未来打好基础。

对 PHP 异步编程感兴趣的同学,现在就可以去试试了。

CatchAdmin
后端开发工程师,前端入门选手,略知相关服务器知识,偏爱❤️ Laravel & Vue
本作品采用《CC 协议》,转载必须注明作者和本文链接