马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一 同步/异步 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,适合数据库、假造化等场景。
- 优点:最大化性能和控制权。
- 缺点:无文件系统保护,易出错,管理复杂。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |