当前位置: 首页 > news >正文

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、物联网等实时业务里释放新一轮性能潜力。

http://www.cnnetsun.cn/news/41380.html

相关文章:

  • 5分钟上手shUnit2:Shell脚本单元测试终极指南
  • uni-app新手避坑指南:从零开始搭建跨平台应用
  • 深入浅出 ES Module
  • wangEditor处理ppt动画效果转网页兼容
  • 深度残差网络在智能垃圾分类中的技术实践与性能分析
  • wangEditor导入MathType公式保留矢量格式
  • Node.js BFF层实战:对接天远综合多头借贷/逾期/欺诈聚合接口
  • Day11 >> 150、逆波兰表达式求值 + 239、滑动窗口最大值 + 347、前K个高频元素
  • System Informer 终极指南:从零掌握Windows系统监控神器
  • 20、集群节点与实例的添加和删除操作指南
  • 5大React动画库生态对比:从入门到精通的全栈解决方案
  • 2、Oracle Real Application Clusters (RAC):特性、成本与效益解析
  • Phi-2模型完全攻略:让27亿参数的小巨人成为你的AI助手
  • 30分钟掌握Tauri:用Rust构建你的第一个桌面应用
  • WeChatTweak-macOS开源项目深度参与指南
  • NootRX:让AMD RDNA 2显卡在macOS上完美运行
  • DBeaver崩溃救星:3步紧急恢复SQL脚本的完整方案
  • 项目效率翻倍,做对了什么?
  • 少儿编程考试路径规划:考级与竞赛时间如何平衡?
  • 火星漫游车Rocker-Bogie悬挂系统核心技术深度解析与实战指南
  • ImmortalWrt网络流量监控完全指南:快速排查网络异常与优化带宽分配
  • 青少年编程考级的三大核心价值:目标建立与能力提升
  • 大疆(DJI)前端开发岗位面试经验总结与备战指南
  • AI难?看涂鸦智能、Lark和德勤中国如何借亚马逊云科技突围
  • Kimi-K2-Instruct模型部署指南:从快速入门到生产级优化
  • 企业级系统监控UI架构设计与性能优化实战
  • 多模态智能体如何重塑人机交互:UI-TARS-1.5的三大技术突破与应用前景
  • 快速排序:10分钟掌握高效算法精髓
  • windows著名漏洞——Zerologon(零登录)
  • 6、技术写作风格与在线文档写作指南