linux aio工作队列处理,异步-Linux上POSIX AIO和libaio之间的区别?

在linux上,这两个AIO实现根本不同。

POSIX AIO是一种用户级别的实现,可以在多个线程中执行常规的阻塞I / O,因此给人一种I / O异步的错觉。 这样做的主要原因是:

它适用于任何文件系统

它可以(基本上)在任何操作系统上工作(请记住,gnu的libc是可移植的)

它适用于启用了缓冲的文件(即未设置O_DIRECT标志)

主要缺点是队列深度(即实际上可以执行的未完成操作的数量)受您选择拥有的线程数量的限制,这也意味着一个磁盘上的慢速操作可能会阻止去往一个磁盘的操作。 不同的磁盘。 它还影响内核和磁盘调度程序看到哪些I / O(或多少)。

内核AIO(即io_submit()等)是内核对异步I / O操作的支持,其中io请求实际上在内核中排队,按您拥有的任何磁盘调度程序排序,大概其中一些转发( 以某种最佳的顺序(作为希望)对实际磁盘进行异步操作(使用TCQ或NCQ)。 这种方法的主要限制是,并非所有文件系统都可以通过异步I / O很好地工作或根本无法工作(并且可能会退回到阻塞语义),因此必须使用O_DIRECT打开文件,这对O_DIRECT带来了很多其他限制。 I / O请求。 如果您无法使用O_DIRECT打开文件,它可能仍然可以“工作”,就像返回正确的数据一样,但是它可能不是异步完成的,而是会退回到阻塞语义上。

还请记住,在某些情况下,io_submit()实际上可以在磁盘上进行阻止。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值