我必须将大量数据写入管道。我可以使用 Linux
io_submit/io_getevents
调用写入命名管道吗?或者它仅为常规文件定义。我试图找到任何解释 AIO 通过管道的文档,但找不到。有人可以帮忙吗?
我主要关心的aio_offset
是struct iocb
.如果将偏移量为 8096 的数据包安排在偏移量为 4096 的数据包之前进行读/写会怎样?
答案1
Linux AIO 不仅限于常规文件 - 它能用于块设备特殊文件。但我预计 AIO 写入不能在管道上使用,因为管道无法查找。
IOCB_CMD_PWRITE
pwrite() 将从 buf 开始的缓冲区中写入 count 个字节到文件描述符 fd 的偏移量 offset 处。文件偏移量未更改。
fd 引用的文件必须能够查找。
AIO 的要点是能够对块设备的多个直接 IO 写入(或读取)进行排队,而无需使用线程。
为了提高管道上批量传输的性能,我建议将管道缓冲区大小从 4kB 增加到不超过 64kB...不过 64kB 已经是现代 Linux 上的默认值。