讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

剧云
剧云

中文短剧剧本制作平台

Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

如何利用 异步文件读写 (AIO) 配合内核 Linux native AIO 激活事件循环的文件系统吞吐

千丽大大_6210

千丽大大_6210

发布时间:2026-05-29 10:52:00

|

623人浏览过

|

来源于php中文网

原创

Linux 文件异步 I/O 应优先使用 io_uring 而非 native AIO:io_uring 支持 IORING_OP_POLL_ADD,可将文件 fd 注册为可轮询对象并融入 epoll 事件循环;native AIO(libaio)无事件通知机制,仅提供轮询接口 io_getevents,无法真正对接事件驱动模型,仅适用于专用批处理场景。

如何利用 异步文件读写 (aio) 配合内核 linux native aio 激活事件循环的文件系统吞吐

Linux 上“利用 AIO 配合 native AIO 激活事件循环”这个说法本身存在概念混淆——native AIO(即 io_setup/io_submit/io_getevents)不触发事件通知,也不适配传统事件循环(如 epoll)。它没有就绪通知机制,不能像 socket 那样注册到 epoll_wait 中。所谓“激活事件循环”在文件 I/O 场景下不可行,必须换用真正可集成的异步模型。

别指望 aio_suspend 或信号来“接入 event loop”

POSIX AIO 的 aio_suspend、sigwaitinfo 或 SIGIO 通知方式响应延迟高、易丢失、与主流事件驱动框架(libuv/libevent/boost.asio)难以安全协同。内核 native AIO(libaio)更无任何事件回调能力:它只提供轮询接口 io_getevents,必须主动检查完成队列。强行把 io_getevents 塞进 epoll 主循环会导致忙等或漏事件,破坏事件驱动语义。

真要对接事件循环,只有一条路:io_uring + io_uring_enter 的 poll 模式

Linux 5.1+ 的 io_uring 支持 IORING_SETUP_IOPOLL 和 IORING_SETUP_SQPOLL,并可通过 IORING_FEATURE_SUBMIT_STABLE 与 IORING_FEATURE_EXT_ARG 实现零拷贝提交;更重要的是,它支持 IORING_OP_POLL_ADD,允许将任意 fd(包括普通文件 fd)注册为可轮询对象,并在 CQE 中返回就绪状态——这才是能真正融入 epoll 或自研事件循环的原生异步能力。

Linux Security Scanner
Linux Security Scanner

Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...

下载
  • 调用 io_uring_prep_poll_add 注册文件 fd,指定 POLLIN/POLLOUT
  • 提交后,当文件可读(如 splice 场景中 pipe 可读)或底层设备就绪时,CQE.res 返回对应事件掩码
  • 该 poll 事件可与 socket、timer 等统一 wait,实现单线程全异步调度
  • 无需 O_DIRECT,buffered I/O 同样生效,页缓存优势完整保留

Native AIO(libaio)只适合专用批处理场景,非事件驱动

若坚持使用 io_submit/io_getevents,它适用的是固定工作负载、高吞吐批量操作,例如:日志归档服务按块预读 GB 级文件、备份系统顺序写入镜像。此时应:

  • 独占一个专用线程轮询 io_getevents,避免阻塞主线程
  • 预注册 fd(io_uring_register_files 的等效做法需自行维护 fd 表)
  • 对齐 buffer 和 offset 到 4K(XFS 推荐),关闭 page cache 影响仅在大顺序 IO 下可接受
  • 绝不混用 sendfile、mmap、普通 read —— 它们与 O_DIRECT 不兼容

小文件 / 混合 I/O?放弃 AIO,回归 epoll + 线程池

对于 HTML、JSON、配置文件等典型小文件随机读,或读写频繁交替的场景:

  • O_DIRECT 失去预读与缓存合并,SSD 寻道放大,吞吐反而下降 30%+
  • native AIO 要求内存对齐、长度对齐、offset 对齐,业务代码侵入性强
  • epoll + 非阻塞 open + 线程池(如 Nginx 的 aio threads)实测更稳更快
  • 现代 glibc 的线程池已优化,配合 io_uring 的 buffered 提交路径,延迟可控

总之,想提升文件系统吞吐又希望保持事件驱动结构,io_uring 是当前唯一可行路径;native AIO 是遗留重型工具,不是事件循环的拼图。内核早已在文档中标记 POSIX AIO 为 legacy,迁移不是可选项,而是必要项。

热门AI工具

更多
超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

457

2023.08.15

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

1000

2023.09.08

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

3552

2023.09.19

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

1156

2023.10.09

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

1029

2023.10.17

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

554

2023.10.17

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

3276

2023.10.18

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

6212

2023.10.20

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

80

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn