Masalah dengan semua pipa adalah bahwa Anda pada dasarnya menggandakan pekerjaan. Tidak peduli seberapa cepat dekompresi itu, data masih harus di-shuttled ke proses lain.
Perl memiliki PerlIO :: gzip yang memungkinkan Anda untuk membaca stream gzip secara langsung. Oleh karena itu, itu mungkin menawarkan keuntungan bahkan jika kecepatan dekompresi mungkin tidak cocok dengan 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]': $!";
Saya mencobanya dengan file terkompresi 13 MB gzip (didekompresi menjadi 1,4 GB) pada 2010 MacBook Pro lama dengan 16 GB RAM dan ThinkPad T400 lama dengan 8 GB RAM dengan file yang sudah ada dalam cache. Di Mac, skrip Perl secara signifikan lebih cepat daripada menggunakan saluran pipa (5 detik vs 22 detik), tetapi pada ArchLinux, ia kalah karena unpigz:
$ time -p ./gzlc.pl spy.gz
1154737
nyata 4.49
pengguna 4.47
sys 0,01
melawan
$ time -p unpigz -c spy.gz | wc -l
1154737
nyata 3.68
pengguna 4.10
sys 1.46
dan
$ time -p zcat spy.gz | wc -l
1154737
nyata 6.41
pengguna 6.08
sys 0,86
Jelas, menggunakan unpigz -c file.gz | wc -l
adalah pemenang di sini baik dari segi kecepatan. Dan, baris perintah sederhana itu pasti mengalahkan penulisan program, betapapun pendeknya.