news 2026/1/22 7:40:10

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/1/20 13:53:26

本地部署交互式计算平台 JupyterLab 并实现外部访问( Linux 版本)

JupyterLab 是一款非常强大的网页版集成开发环境,是 Jupyter Notebook 的下一代产品,提供了更多的灵活性和交互性,主要用于编写和运行代码、进行数据清理与转换、数值模拟、统计建模、数据可视化、机器学习等多种数据分析和科学计算任务。本文…

作者头像 李华
网站建设 2026/1/13 20:09:17

Rust + PostgreSQL:构建高性能数据流处理管道的终极指南

Rust PostgreSQL:构建高性能数据流处理管道的终极指南 【免费下载链接】pg_replicate Build Postgres replication apps in Rust 项目地址: https://gitcode.com/gh_mirrors/pg/pg_replicate 为什么选择这个组合? pg_replicate 是一个基于 Rust…

作者头像 李华
网站建设 2026/1/20 19:50:42

机器学习模型实战全解析

数模实战视角下的机器学习模型知识点总结 预测模型—回归模型(监督学习) 线性回归(Linear Regression) 简单线性回归(Simple Linear Regression) 通过一条直线拟合一个自变量与因变量之间的线性关系&#x…

作者头像 李华
网站建设 2026/1/16 6:53:04

BERT微调实践:冻结预训练层+分类头增量训练详解

本文通过一个完整的情感分析二分类任务,详细讲解如何使用BERT进行模型微调(Fine-tuning),重点分析冻结预训练参数和增量训练分类头的核心思想与实现细节。一、完整代码实现# net.py # -*- coding: utf-8 -*- """ B…

作者头像 李华
网站建设 2026/1/21 18:47:20

单芯片音频二分频新高度:全系列高通QCC平台智能分频方案解析

单芯片音频二分频新高度:全系列高通QCC平台智能分频方案解析 腾泰技术再次突破音频处理技术瓶颈,基于对高通QCC平台DSP核心的深度驾驭与算法创新,在全系列芯片上实现了单芯片高品质音频二分频硬件方案,为多扬声器音频设备带来集成…

作者头像 李华
网站建设 2026/1/19 19:21:14

FilamentPHP 3.3.15版本发布:表单构建革命与性能飞跃

FilamentPHP 3.3.15版本发布:表单构建革命与性能飞跃 【免费下载链接】filament filament:这是一个基于Laravel框架的模块化CMS系统,适合搭建企业级网站和应用程序。特点包括模块化设计、易于扩展、支持多语言等。 项目地址: https://gitco…

作者头像 李华