嗳诿 发表于 2025-10-1 13:03:36

几种io模型

一 同步/异步 io

同步io


[*]调用如 read()、write() 等系统调用时,进程会阻塞,直到数据读写操作完成后才返回。
[*]期间进程无法做其他事情,等待 I/O 完成。
[*]简单易用,但在高并发或慢设备场景下可能导致性能瓶颈。
异步io


[*]进程发起 I/O 请求后,系统立即返回,I/O 操作在后台进行。
[*]进程可以继续执行其他任务,等 I/O 完成后通过回调、事件通知等方式获知结果。
[*]类型主要包括:

[*]posix aio,接口如 aio_read(), aio_write(),适用于文件和部分块设备,但性能有限。
[*]linux native aio,通过 io_submit(), io_getevents(), io_setup(), io_destroy() 等系统调用实现,性能优于 POSIX AIO,常用于高性能服务器和数据库。
[*]io_uring,接口如 io_uring_setup(), io_uring_enter(), io_uring_register(),支持文件、网络、缓冲区等多种异步操作,低延迟、高吞吐,广泛用于新项目。
[*]异步事件通知机制,如 epoll, select, poll,用于异步网络和文件描述符事件处理。
[*]异步信号驱动,通过 fcntl() 设置 O_ASYNC 标志,I/O完成后通过信号通知进程。

二 Buffer/mmap/Direct/Raw io

Buffer io


[*]又称 缓存 I/O 或 标准 I/O。
[*]数据先读入内核页缓存(buffer cache),再由用户空间读取。
[*]写操作也先写入缓存,稍后再同步到磁盘(如 write()、read())。
[*]优点:有缓存加速,减少磁盘访问次数。
[*]缺点:数据一致性依赖于缓存刷新,可能丢失未同步数据。
mmap io


[*]通过 mmap() 系统调用,将文件直接映射到进程虚拟地址空间。
[*]读写文件就像操作内存一样,内核自动处理页缓存和磁盘同步。
[*]优点:高效,适合随机访问和大文件处理。
[*]缺点:管理复杂,容易出现一致性和同步问题。
Direct io


[*]通过 O_DIRECT 标志打开文件,读写时绕过内核页缓存,直接与磁盘交互。
[*]需要对齐缓冲区和 I/O 大小。
[*]优点:减少内存拷贝,适合数据库等对一致性和性能要求高的场景。
[*]缺点:编程复杂,不能利用缓存加速。
Raw io


[*]直接对块设备(如 /dev/sda)进行读写,不经过文件系统。
[*]通常也采用 Direct I/O,适合数据库、虚拟化等场景。
[*]优点:最大化性能和控制权。
[*]缺点:无文件系统保护,易出错,管理复杂。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

窖咎 发表于 2025-11-3 23:01:16

感谢分享

归悦可 发表于 2025-11-8 05:46:28

收藏一下   不知道什么时候能用到

欧阳雪枫 发表于 2025-11-22 03:07:35

这个好,看起来很实用

挽幽 发表于 2025-12-9 08:19:21

过来提前占个楼

嗦或 发表于 2025-12-18 10:06:25

这个好,看起来很实用

叶芷雁 发表于 2025-12-29 08:40:59

分享、互助 让互联网精神温暖你我

步雪卉 发表于 2025-12-29 09:44:52

谢谢楼主提供!

骆贵 发表于 2026-1-17 13:19:51

感谢,下载保存了

岳娅纯 发表于 2026-1-18 13:42:08

感谢,下载保存了

贼瘁 发表于 2026-1-18 23:12:17

新版吗?好像是停更了吧。

锄淫鲷 发表于 2026-1-19 02:41:16

谢谢分享,试用一下

汲佩杉 发表于 2026-1-19 04:50:54

懂技术并乐意极积无私分享的人越来越少。珍惜

羊舌正清 发表于 2026-1-22 09:27:05

东西不错很实用谢谢分享

捐催制 发表于 2026-1-23 08:17:25

不错,里面软件多更新就更好了

僚娥 发表于 2026-1-27 06:01:29

新版吗?好像是停更了吧。

准挝 发表于 2026-1-30 02:04:49

感谢,下载保存了

赖秀竹 发表于 2026-2-2 20:44:29

yyds。多谢分享

禄磊 发表于 2026-2-3 05:31:56

收藏一下   不知道什么时候能用到

上官银柳 发表于 2026-2-4 03:02:18

用心讨论,共获提升!
页: [1] 2
查看完整版本: 几种io模型