在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池

码匠2个月前PHP10000

在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池

现代软件的构建最终仍然要回到实践。再复杂的产品,也必须经过真实用户的检验。只有最终用户,才能真正区分哪些设计是有效的、哪些方向值得继续推进。再优雅的架构,如果没有落到真实代码和真实问题里,就很难体现实际价值。

完全异步化的 PHP Core

0.6.0 中最激进的一项变化,是 PHP 核心已经实现了完整的异步化。

长期以来,PHP 的运行模型一直以同步阻塞为主。一次 I/O 操作往往会直接阻塞当前执行流程,直到操作完成。而在这个版本中,这种情况已经发生了根本变化。

文件 I/O、socket、pipe、STDIO、STDERR、CURL 等能力现在都可以真正并发执行。无论是打开一个进程、读取文件,还是发起 HTTP 请求,这些操作都会运行在内部的 EventLoop 之下。不需要额外包装器,也不需要专门适配器,普通 PHP 函数本身就可以在协程中以异步方式运行。

一套新的异步编程 API

目前可用的核心能力包括:

  • Coroutines:通过 spawn() 启动异步任务
  • Future:一种更便于处理异步结果的 Promise 变体
  • Awaiting:包括 await、await_all()、await_first_success()、await_any_of()、delay()、suspend()
  • Channels:通过 Channel 在协程之间传递数据
  • Cancellation:提供 cancel()、protect()、timeout() 等一次性取消能力
  • Scope:用于管理一组协程的生命周期
  • TaskGroup / TaskSet:提供结构化并发能力
  • Context:为协程绑定上下文数据
  • iterate():并发处理集合
  • Pool / PDO Pool:资源池与数据库连接池

PDO Pool:开箱即用的连接池

0.6.0 的一个亮点,是 PDO 现在已经支持内建数据库连接池。

 = new PDO('mysql:host=localhost;dbname=app', 'root', 'secret', [
    PDO::ATTR_POOL_ENABLED => true,
    PDO::ATTR_POOL_MIN => 2,
    PDO::ATTR_POOL_MAX => 10,
]);

开发者只需要在创建对象时增加几个参数,剩下的交给池本身处理即可。连接池会自动为每个协程分配独立连接,并在协程结束后归还。事务天然隔离;如果某个协程结束前没有显式调用 commit(),连接池还会自动执行回滚。

如何试用

最快的试用方式仍然是 Docker:

docker pull trueasync/php-true-async:0.6.0-php8.6
docker run --rm trueasync/php-true-async:0.6.0-php8.6 php -v

在 Linux 和 macOS 上,也可以通过安装脚本从源码编译 PHP。

相关文章

ThinkTemplate 模板引擎完全指南

ThinkTemplate 模板引擎完全指南ThinkTemplate 是 ThinkPHP 的内置模板引擎,现已支持独立使用。本文详细介绍其核心特性和使用方法。环境要求ThinkTemplate 3...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。