.png)
Eu tenho que escrever muitos dados em um pipe. Posso usar as chamadas do Linux
io_submit/io_getevents
para gravar em Named Pipes ou elas são definidas apenas para arquivos regulares. Tentei encontrar qualquer documento que explicasse o AIO sobre pipes, mas não consegui. Alguém pode ajudar aqui.
Principalmente estou preocupado com o aio_offset
campo em struct iocb
. E se um pacote de dados com deslocamento 8096 estiver programado para leitura/gravação antes de um pacote de dados com deslocamento 4096.
Responder1
O Linux AIO não se limita apenas a arquivos regulares - elepodeser usado em arquivos especiais de dispositivos de bloco. Espero que as gravações AIO não possam ser usadas em pipes, porque os pipes não são capazes de buscar.
IOCB_CMD_PWRITE
pwrite() grava para contar bytes do buffer começando em buf até o descritor de arquivo fd em offset offset. O deslocamento do arquivo não é alterado.
O arquivo referenciado por fd deve ser capaz de buscar.
O objetivo do AIO é ser capaz de enfileirar várias gravações (ou leituras) diretas de IO em um dispositivo de bloco sem precisar usar threads.
Para melhorar o desempenho de transferências em massa através de um pipe, eu sugeriria aumentar o tamanho do buffer do pipe de 4kB para não mais que 64kB... exceto que 64kB já é o padrão no Linux moderno.