.png)
Tengo que escribir muchos datos en una tubería. ¿Puedo usar las llamadas de Linux
io_submit/io_getevents
para escribir en Named Pipes o está definido solo para archivos normales? Intenté encontrar algún documento que explique el AIO sobre tuberías, pero no pude. ¿Alguien puede ayudar aquí?
Lo que más me preocupa es el aio_offset
campo en struct iocb
. ¿Qué sucede si un paquete de datos con desplazamiento 8096 está programado para lectura/escritura antes que un paquete de datos con desplazamiento 4096?
Respuesta1
Linux AIO no se limita sólo a archivos normales:poderser utilizado en archivos especiales del dispositivo de bloque. Sin embargo, espero que las escrituras AIO no se puedan usar en tuberías, debido a que las tuberías no son capaces de realizar búsquedas.
IOCB_CMD_PWRITE
pwrite() escribe hasta contar bytes desde el búfer comenzando en buf en el descriptor de archivo fd en el desplazamiento. El desplazamiento del archivo no se modifica.
El archivo al que hace referencia fd debe ser capaz de buscar.
El objetivo de AIO es poder poner en cola múltiples escrituras (o lecturas) de IO directas en un dispositivo de bloque sin tener que usar subprocesos.
Para mejorar el rendimiento de las transferencias masivas a través de una tubería, sugeriría aumentar el tamaño del buffer de la tubería de 4kB a no más de 64kB... excepto que 64kB ya es el valor predeterminado en Linux moderno.