小典典
在linux上,这两个AIO的实现截然不同。
POSIX AIO是一种用户级实现,它允许在多个线程上执行常规的块I/O,从而给人一种I/O异步的错觉。 其主要理由如下
适用于任何文件系统
这“基本上”可以在任何操作系统上运行。 请注意gnu的libc是可移植的。
应用于启用了缓冲区的文件,即未设置O_DIRECT标志的文件
主要缺点是队列深度,即实际可执行的未完成操作的数量受选定线程的数量的限制。 也就是说,在一个磁盘上执行慢速操作可能会阻止对一个磁盘的操作。 不同的磁盘。 它还会影响内核和磁盘调度程序识别的I
/O (或多少钱)。
内核AIO,即io_submit (等)是内核对异步I /
o操作支持。 实际上,I/o请求是在内核中排队的,并按其拥有的磁盘调度程序进行排序。 也许,一些传输可以使用TCQ或NCQ以最佳顺序对实际磁盘执行异步操作。 此方法的主要限制是,并非所有文件系统都支持异步I
由于在/O中不起作用或根本不起作用,因此必须使用O_DIRECT打开文件。 O_DIRECT还有很多其他限制。 I /
o拜托了。 如果无法使用O_DIRECT打开文件,则可能可以“工作”,就像返回正确的数据一样,但可能会返回块语义,而不是异步完成。
请注意,在某些情况下,io_submit ()实际上可以阻止在磁盘上。
2020-06-03