에서 파일에 비동기 쓰기 :기본적으로 내가 싶습니다 펄
- 가 메모리에 배열로 네트워크에서 많은 양의 데이터를 읽습니다.
- 이 배열 데이터를 비동기 적으로 쓰고 디스크에 도달하기 전에 bzip2를 통해 실행합니다. 이 수는
반복 ..
인가? 이것이 가능하다면, 필자는 AIO 문서가 비동기 쓰기가 완료되기 전에이 배열을 변경하면 안된다고 말한 것처럼 다른 배열로 데이터의 다음 패스를 읽어야한다는 것을 알고 있습니다. bzip2 패스가 네트워크 읽기보다 훨씬 오래 걸리기 때문에 모든 디스크 쓰기 작업을 배경으로하고 싶습니다.
이 행할 수 있습니까? 아래는 필자가 생각하는 간단한 예제이다. 그러나 이것은 테스트를 위해 파일을 배열 @a로 읽는다.
use warnings;
use strict;
use EV;
use IO::AIO;
use Compress::Bzip2;
use FileHandle;
use Fcntl;
my @a;
print "loading to array...\n";
while(<>) {
$a[$. - 1] = $_;
}
print "array loaded...\n";
my $aio_w = EV::io IO::AIO::poll_fileno, EV::WRITE, \&IO::AIO::poll_cb;
aio_open "./out", O_WRONLY || O_NONBLOCK, 0, sub {
my $fh = shift or die "error while opening: $!\n";
aio_write $fh, undef, undef, $a, -1, sub {
$_[0] > 0 or die "error: $!\n";
EV::unloop;
};
};
EV::loop EV::LOOP_NONBLOCK;
'aio_write' 문에서 스칼라'$ a'는 입력을 저장하는 배열'@ a '와는 다른 변수입니다. – mob
압축을 위해 bzip을 작성하는 경우 AIO가 필요하지 않습니다. bzip 할 파이프를 연 다음 소켓에서 (비동기 적으로) 읽고 그 데이터를 bzip 파이프에 씁니다. AnyEvent :: Handle 만 있으면됩니다. – jrockway