Swoole v6 正式发布
Swoole v6 正式发布,增加了 16 项新功能,主要如下:
- 多线程支持:支持类似 NodeJS Workers Thread 的真正多线程,基于 PHP ZTS 实现,使用简单且无数据竞争问题。提供
Swoole\Thread
类用于创建线程,在线程中可使用协程 API 实现异步非阻塞 IO。 - 多线程服务器:服务器端模块适配多线程,提供
SWOOLE_THREAD
模式,Event Worker、Task Worker 以及 User Worker 改为创建线程执行,工作线程间可传递ArrayList
和Map
等资源共享数据。 - 新增线程安全数据容器:提供
ArrayList
、Map
、Queue
3 种数据容器。ArrayList
、Map
实现ArrayAccess
接口可当 PHP 数组用,Queue
是先进先出队列可作线程间消息通信容器。容器支持多维嵌套,且是线程安全的,读写操作底层自动加锁。 - 新增线程同步工具:包括
Swoole\Thread\Lock
、Swoole\Thread\Atomic
、Swoole\Thread\Barrier
等,还提供Thread::join()
、Thread::joinable()
、Thread::detach()
等方法用于线程管理和同步。 - 文件异步操作优化:文件异步操作支持使用
io_uring
作为底层引擎,安装liburing
并在编译 Swoole 时开启--enable-iouring
,相关文件操作函数的异步操作将由io_uring
实现,且io_uring
支持多线程轮询模式ioring_setup_sqpoll
。 - 协程支持优化:升级
boostcontext
版本到 1.84,龙芯 CPU 也能够支持协程。 - 新增数据容器方法:新增
Swoole\Thread\Map::find()
、Swoole\Thread\ArrayList::find()
、Swoole\Thread\ArrayList::offsetunset()
方法。 - 新增进程和线程方法:新增
Swoole\process::getaffinity()
、Swoole\Thread::setname()
、Swoole\Thread::setaffinity()
、Swoole\Thread::getaffinity()
、Swoole\Thread::setpriority()
、Swoole\Thread::getpriority()
、Swoole\Thread::gettid()
方法。 - 新增 Iouring 配置相关:新增
iouring_workers
修改iouring
线程数,新增iouring_flags
支持修改iouring
工作模式。 - 新增多线程同步屏障:增加
Swoole\Thread\Barrier
多线程同步屏障。 - 新增设置 Cookie 函数:增加新的设置 Cookie 的函数。
- 新增互斥协程锁:新增 “非阻塞,可重入的互斥协程锁”,可在进程间 / 线程间使用,且不阻塞进程 / 线程。
- Socket 优化:
Swoole\coroutine\socket::getoption()
支持tcp_info
选项。 - 客户端优化:
Swoole\client
同步阻塞客户端支持 http 代理,新增异步非阻塞的 tcp/udp/unix socket 客户端Swoole\async\client
。 - Redis 服务器优化:优化
Swoole\redis\server::format()
方法,支持内存零拷贝,支持 redis 嵌套结构。 - 支持高性能压缩工具:支持高性能压缩工具
zstd
,编译 Swoole 时加上--enable-zstd
,http 客户端和服务端之间便可使用zstd
来压缩响应或者解码响应。