linux 磁盘api,linux - Linux磁盘文件AIO

根据this tutorial异步磁盘文件,至少从编程/api的角度来看,在Linux上使用a io很容易实现IO。但是在本教程之前和之后,我读了很多文章和文章,这些文章和文章要么不能完成,要么您应该在补丁和许多其他问题中使用libevent。另一件事是我应该等待信号的循环,但是根据本教程,我可以使用回调机制,这显然使AIO更容易使用。

现在,我不是一个Linux程序员,即使从长远来看,我只是想找到一种简单的方法来支持Linux上的异步磁盘文件IO,学习它并将其添加到我个人项目所需的异步磁盘IO库中。目前我在Windows上使用重叠IO,在非Windows平台上使用IO工作线程。由于多线程解决方案可能很棘手,我想用aio在Linux上替换它。

那么,如本教程所述,AIO有什么问题?是表演吗?是否有使用AIO进行操作的限制?

另外,只要代码在主要的Linux发行版上工作,我不在乎代码是否可以移植到其他符合POSIX的平台上。我只关心普通的磁盘文件IO。

谢谢。

最佳答案:

本教程概括介绍了异步I/O,并讨论了如何对其提供内核支持。然后继续讨论posix aio(它是用于访问异步I/O的标准化API),这意味着在Linux上使用posix aio api将使您能够访问对aio的内核支持。事实并非如此。

在Linux上,有两种不同的AIO实现:

内核aio使用的是io_Submit()等),它仅在内核2.6(或真正的2.5)中受支持,并且可能有它的后移植版本到2.4。

posix aio是glibc特性,本质上与内核无关。它根据用户级线程来实现POSIX API,从而进行阻塞磁盘I/O调用。

因此,简而言之,如果已经为磁盘I/O提供了多个线程的通用实现,那么使用它可能比使用glibc的实现更好(因为您对它的控制可能稍微多一点)。

如果您致力于实际使用io_Submit()函数系列,那么您可能需要做大量的工作来规避对这些函数的限制。

内核AIO要求使用o_direct打开文件。而这又要求所有文件偏移量、读写大小与磁盘上的块对齐。如果您只使用一个大文件,并且可以使其工作起来非常类似于操作系统中的页面缓存,那么这通常是可以的。对于以任意偏移量和长度读取和写入任意文件,它会变得混乱。

如果您最后给内核AIO一次机会,我强烈建议您考虑将一个或多个eventfds绑定到IOCBs,这样您就可以使用epoll/select等待完成,而不必在io_GetEvents()中阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值