Linux AIO / io_submit / io_getevents / на fifo (именованные каналы)

Linux AIO / io_submit / io_getevents / на fifo (именованные каналы)

Мне нужно записать много данных в канал. Могу ли я использовать вызовы Linux io_submit/io_geteventsдля записи в именованные каналы или это определено только для обычных файлов. Я пытался найти любой документ, который объясняет AIO через каналы, но не смог. Может ли кто-нибудь помочь здесь.

Больше всего меня беспокоит aio_offsetполе в struct iocb. Что, если пакет данных со смещением 8096 запланирован для чтения/записи раньше пакета данных со смещением 4096.

решение1

Linux AIO не ограничивается только обычными файлами - онможетиспользоваться в специальных файлах блочных устройств. Я предполагаю, что записи AIO не могут использоваться в каналах, поскольку каналы не способны осуществлять поиск.

IOCB_CMD_PWRITE

pwrite() записывает count байт из буфера, начиная с buf, в файловый дескриптор fd по смещению offset. Смещение файла не изменяется.

Файл, на который ссылается fd, должен поддерживать возможность поиска.

Суть AIO заключается в возможности ставить в очередь несколько прямых операций записи (или чтения) ввода-вывода на блочное устройство без использования потоков.

Чтобы повысить производительность массовой передачи данных по каналу, я бы предложил увеличить размер буфера канала с 4 КБ до 64 КБ... за исключением того, что 64 КБ уже является значением по умолчанию в современных Linux.

Связанный контент