PHP RFC: True Async

TrueAsync 项目在 wiki.php.net 上通过官方 RFC 流程推进了大约一年。 已发布两个 RFC,描述了基本的并发模型 和结构化并发。

RFC #1 — PHP True Async

作者:Edmond [HT]版本:1.7目标版本:PHP 8.6+Draft

定义 PHP 并发模型的主要 RFC。 描述了协程、函数 spawn() / await() / suspend()Coroutine 对象、AwaitableCompletable 接口、 协作取消机制、Fiber 集成、 错误处理和优雅关闭。

关键原则:

  • 以最小的代码更改启用并发
  • 协程保持顺序执行的假象
  • I/O 操作时自动切换协程
  • 协作取消 — "cancellable by design"
  • 面向扩展的标准 C API

在 wiki.php.net 上阅读 RFC →

RFC #2 — Scope 与结构化并发

作者:Edmond [HT]版本:1.0Draft

基础 RFC 的扩展。引入 Scope 类,将 协程的生命周期绑定到词法作用域。 描述了 scope 层次结构、错误传播、 "僵尸"协程策略以及通过 protect() 实现的临界区。

解决的问题:

  • 防止协程泄漏到 scope 之外
  • scope 退出时自动清理资源
  • 层级取消:取消父级 → 取消所有子级
  • 保护临界区免受取消
  • 死锁和 self-await 检测

在 wiki.php.net 上阅读 RFC →

这些 RFC 的关联

第一个 RFC 定义了底层原语 — 协程、 基础函数和面向扩展的 C API。第二个 RFC 添加了 结构化并发 — 管理协程组的机制, 使并发代码安全且可预测。

它们共同构成了 PHP 的完整异步编程模型:

RFC #1:True AsyncRFC #2:Scope
层级原语管理
提供spawn(), await(), CoroutineScope, TaskGroup, protect()
类比Go goroutines, Kotlin coroutinesKotlin CoroutineScope, Python TaskGroup
目标运行并发代码安全的生命周期管理

当前 RFC 状态

目前 TrueAsync 项目在 RFC 流程中遇到了不确定性。 在过去几个月里,讨论几乎停滞了,对其未来也没有明确的方向。 很明显,RFC 无法通过投票,而且没有办法改变这一点。

出于这些原因,RFC 流程目前被视为冻结状态, 项目将在开放社区内继续发展,不再具有"官方"地位。

"It's easier to ask forgiveness than it is to get permission."

— Grace Hopper

参与讨论

RFC 在 internals@lists.php.net 邮件列表 和 GitHub Discussions 上讨论。

也欢迎加入 Discord 上的讨论。