모든 파이프 라인의 문제점은 본질적으로 작업을 두 배로 늘리는 것입니다. 압축 해제 속도에 관계없이 데이터는 여전히 다른 프로세스로 셔틀되어야합니다.
Perl에는 PerlIO :: gzip 이있어 gzipped 스트림을 직접 읽을 수 있습니다. 따라서 압축 해제 속도가 다음 속도와 일치하지 않더라도 이점을 제공 할 수 있습니다 unpigz
.
#!/usr/bin/env perl
use strict;
use warnings;
use autouse Carp => 'croak';
use PerlIO::gzip;
@ARGV or croak "Need filename\n";
open my $in, '<:gzip', $ARGV[0]
or croak "Failed to open '$ARGV[0]': $!";
1 while <$in>;
print "$.\n";
close $in or croak "Failed to close '$ARGV[0]': $!";
16GB RAM이 있는 오래된 2010 MacBook Pro와 이미 캐시에 파일이있는 8GB RAM 이 있는 오래된 ThinkPad T400에서 13MB gzip 압축 파일 (1.4GB로 압축 해제)로 시도했습니다 . Mac에서 Perl 스크립트는 파이프 라인 (5 초 대 22 초)을 사용하는 것보다 훨씬 빠르지 만 ArchLinux에서는 unpigz를 잃었습니다.
$ 시간 -p ./gzlc.pl spy.gz
1154737
진짜 4.49
사용자 4.47
시스 0.01
대
$ time -p unpigz -c spy.gz | 화장실 -l
1154737
진짜 3.68
사용자 4.10
시스템 1.46
과
$ time -p zcat spy.gz | 화장실 -l
1154737
진짜 6.41
사용자 6.08
시스템 0.86
분명히, unpigz -c file.gz | wc -l
속도 측면에서 사용하는 것이 승자입니다. 그리고이 간단한 명령 줄은 프로그램을 작성하는 것보다 짧습니다.