news 2026/6/15 17:29:43

PHP 基金会宣布:Streams 现代化 将引入事件循环与异步新能力

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP 基金会宣布:Streams 现代化 将引入事件循环与异步新能力

什么是 PHP Streams?

在讨论具体改进之前,先回顾一下 Streams 的概念以及它的意义。

自 2001 年左右引入以来,PHP Streams 提供了一种统一处理文件与网络 I/O 的方式,使文件、套接字或内存等不同来源的数据都能通过一致的 API 与同一组函数访问。

随着时间推移,PHP Streams 被证明既强大又灵活,但部分实现没有跟上现代用例、性能预期和系统能力的演进。本次计划旨在让 Streams 更快、更安全,也更易于为现代 PHP 应用扩展。

整个工作范围被划分为四个子项目。

性能与稳定性提升

这一部分关注的是改进 PHP Streams 在复制与定位(seeking)时的性能和一致性。

Stream 复制仍有优化余地。比如复制大文件或处理网络传输时,可以借助 Linux 上的 io_uring 等异步 I/O 机制加速。同时还要避免 memory-mapped 文件可能引发的崩溃。因此目标是逐步淘汰 mmap 的使用,并在即将推出的 I/O API 中引入新的复制 API,在可用的平台上调用 io_uring 或其他系统特性。

当前 filtered streams 的寻址存在问题,导致行为出现不一致。开发者在使用 filters 时,经常会遇到无法回到开头或跳过数据的限制。

计划将引入新的寻址 filter API,让可寻址的 stream 支持 seeking,并在不支持的情况下明确禁止。例如,回到开头应该始终可行,但并非所有 filter 都支持任意位置的寻址;有些可以,有些不行,因此基金会希望通过全新的内部 API 来表达这些差异。

错误处理与监控增强

这一部分主要聚焦新的错误报告机制及更多 hooks。目前,很多底层 I/O 错误在用户态的呈现并不一致。目标是标准化 Streams 的错误报告方式,便于开发者调试。

新的错误报告思路是:在更完善的错误处理框架下,将错误收集并回传给用户态。基金会将对现有错误进行封装,并提供更丰富的上下文,帮助开发者定位问题。

至于 hooks,则会通过特殊的 polling wrapper 支持 async 代码,使部分阻塞操作(尤其是 file IO)能够被替换。此改动主要面向内部实现,如果性能允许,团队也会评估是否把部分 hooks 暴露给用户态。

网络与套接字改进

这一部分集中在引入全新的 polling API、改进 stream_select,并解决套接字相关的问题。

现代网络应用高度依赖可扩展的事件处理能力。新的 polling API 将引入 epoll、kqueue 等现代机制,帮助 PHP 更高效地管理多路 I/O Streams。

目前用户态只有 select 可用,而它在性能和扩展性上的瓶颈早已显现。这次现代化将直接惠及实现 async networking 或事件驱动 I/O 的框架与扩展。

这一 API 的主要目标,是在核心内部建立一套可复用的接口,既能服务于 PHP 内部的各种任务,也能作为未来 async IO API 的基础(或者备用方案)。

团队还会扩展 stream_select 的用法,让它更好地支持 filtered streams 的 polling,并为能够提供额外数据的外部对象暴露 API,与新的 polling API 的能力保持一致。为此需要适度重构,部分逻辑也可能与新 API 共享。

此外,计划对套接字进行多项改进。团队计划新增 socket context options,提供更灵活的配置能力;修复若干套接字处理问题,并强化 file descriptor 相关的实用工具。

安全与 TLS 增强

另一项重要工作聚焦在处理加密 Streams 的 OpenSSL 扩展。

团队准备重构当前并不完善、限制较多的 async 处理逻辑。完成后,将能更清楚地告知用户态需要何种 polling 动作,例如该 stream 应该等待读操作还是写操作。

此外,改进计划也强化了 TLS 1.3 支持,允许选择特定的 cipher suites,并整合 TLS Sessions、PSK(Pre-Shared Key)以及 early data(0-RTT)。

为支撑这些改动,基金会团队正在开发新的 TLS 1.3 PHP 测试库,便于自定义协议流程,并测试 TLS 1.3 的诸多特性,包括异步行为。

影响:对 PHP 生态与异步框架的启示

这些举措将共同推动 PHP 的 I/O 层在未来十年持续服务于 Web 与 CLI 的发展需求。

相关工作已经在 2025 年启动,并将持续推进至 2026 年。PHP Foundation 会通过官方更新、PHP internals 讨论以及 RFC 持续公开阶段性成果。

对更广泛的 PHP 生态而言,这轮 Streams 现代化不仅改善了底层 I/O 能力,也为异步框架铺平了道路。像 workerman/ReactPHP 这样依赖持续连接与事件循环的常驻内存框架,将能借助新的 polling API 进一步降低上下文切换成本,并在高并发场景中获得更稳定的资源利用率。随着 Streams 层统一错误处理、权限控制与 TLS 能力,也期待更多基于这些 API 的扩展与框架出现,在 WebSocket、RPC、物联网等实时业务里释放新一轮性能潜力。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 6:46:42

【Linux】进程等待与资源回收:父进程的责任

文章目录进程等待与资源回收:父进程的责任一、进程终止方式回顾与深化1.1 回顾:为什么需要进程等待1.2 进程退出的三种方式1.2.1 return退出1.2.2 exit()函数1.2.3 _exit()函数1.3 三种方式的关键区别:缓冲区刷新1.4 退出码的含义二、进程等待…

作者头像 李华
网站建设 2026/6/15 15:10:57

Android16 EDLA 认证测试CTS过程介绍

Android EDLA 认证测试CTS过程介绍 文章目录 Android EDLA 认证测试CTS过程介绍一、前言二、基本环境搭建1、环境说明核心选择原则(优先级从高到低)2、CTS常用测试命令3、测试结果(1)CTS完整报告示例(2)单项…

作者头像 李华
网站建设 2026/6/15 15:10:33

重新定义音乐体验:HyPlayer如何成为网易云音乐的完美替代方案

重新定义音乐体验:HyPlayer如何成为网易云音乐的完美替代方案 【免费下载链接】HyPlayer 仅供学习交流使用 | 第三方网易云音乐播放器 | A Netease Cloud Music Player 项目地址: https://gitcode.com/gh_mirrors/hy/HyPlayer 在数字音乐时代,我们…

作者头像 李华
网站建设 2026/6/15 15:12:13

5步实现基于openpi框架的UR5机械臂AI控制完整指南

5步实现基于openpi框架的UR5机械臂AI控制完整指南 【免费下载链接】openpi 项目地址: https://gitcode.com/GitHub_Trending/op/openpi 工业机器人控制正迎来AI技术革命,传统示教编程难以应对复杂任务变化,而专用AI方案开发周期长、兼容性差。op…

作者头像 李华
网站建设 2026/6/15 15:17:22

终极指南:高效掌握二进制解析的核心技巧

终极指南:高效掌握二进制解析的核心技巧 【免费下载链接】binary-parser A blazing-fast declarative parser builder for binary data 项目地址: https://gitcode.com/gh_mirrors/bi/binary-parser 在现代数据处理领域,二进制解析已经成为处理复…

作者头像 李华
网站建设 2026/6/15 17:08:09

竖屏视频变横屏不损失画质的方法,新手1分钟改变画框

刷到好看的竖屏视频想转横屏视频?用传统工具折腾半天,要么画质糊成马赛克,要么画面比例畸形,甚至裁剪半天还留黑边。光是调整参数、修复画质就要半小时,新手直接被劝退!但用影忆,竖屏转横屏全程…

作者头像 李华