Асинхронно записывать в этот массив данные
К вашему сведению, write () почти всегда асинхронны. Если, конечно, вы не заполните кэш записи ОС.
Вы бы очень мало выиграли от использования AIO по сравнению с запуском простой трубы, например, без проверки:
my $socket; # INET something
my $out = new IO::Handle;
open($out, "|bzip2 > ./out") || die;
while (1) {
my $buf;
$socket->recv($buf, 64*1024, 0);
last unless defined $buf and length $buf;
print $out $buf;
}
close($out);
В большинстве операционных систем очень трудно генерировать такое количество информации, чтобы заполнить кэш записи. Минимум - наличие bzip2 в конвейере: пропускная способность жестких дисков намного выше (> 50 МБ / с), чем производительность сжатия (в диапазоне мегабайт в секунду).
Если вы хотите запустить его в фоновом режиме или иметь несколько параллельных потоков, не бойтесь fork () и используйте exit () от child, чтобы сообщить основной программе о том, как проходила операция.
Насколько мне известно, наиболее полезный (и, вероятно, единственный полезный) аспект AIO - это асинхронное чтение. Это не может быть достигнуто любым другим способом. Использование AIO только для асинхронной записи имеет мало смысла.