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

码匠2个月前PHP9990

在 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...

ThinkPHP8.X模型关联详解

在ThinkPHP框架中,模型关联是处理数据表数据表之间关系的重要机制。通过模型关联,我们可以方便地操作具有关联关系的数据,如一对一、一对多、多对多等关系。本文将详细介绍ThinkPHP中常见的模型关...

ThinkPHP 8 性能优化实战:从 2s 到 200ms 的蜕变

最近接手了一个 ThinkPHP 8 项目,首页加载竟然要 2 秒多。经过一周的深度优化,最终稳定在 200ms 以内。这篇文章分享我的优化思路和实战经验。一、问题诊断:找到性能瓶颈优化之前,先用工具...

ThinkPHP5.0.24 升级 ThinkPHP8.1 实战指南

从 ThinkPHP5.0.24 升级至 ThinkPHP8.1,虽无 TP3 升级的跨度大,但核心差异体现在命名空间规范、ORM 语法、路由机制、验证体系及 PHP 版本兼容(TP8 要求 PHP8...

ThinkPHP3.2.3 升级 ThinkPHP8.1 实战指南

从 ThinkPHP3.2.3 跳跃升级至 ThinkPHP8.1,核心难点在于底层 API、语法规范、目录结构的大幅变更。本文覆盖控制器、模型、路由、验证、数据库操作等核心模块,通过“TP3.2.3...

发表评论    

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