ปัญหาของท่อทั้งหมดคือคุณต้องเพิ่มงานเป็นสองเท่า ไม่ว่าการบีบอัดข้อมูลจะรวดเร็วแค่ไหนข้อมูลก็ยังต้องถูกปิดใช้งานไปยังกระบวนการอื่น
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]': $!";
ฉันลองกับไฟล์ที่บีบอัด 13 MB gzip (คลายการบีบอัดถึง 1.4 GB) บนMacBook Pro รุ่นเก่าที่มี RAM 16 GBและThinkPad T400 รุ่นเก่าที่มี RAM 8 GBพร้อมไฟล์ในแคชอยู่แล้ว สำหรับ Mac สคริปต์ Perl นั้นเร็วกว่าการใช้ท่ออย่างมีนัยสำคัญ (5 วินาทีเทียบกับ 22 วินาที) แต่สำหรับ ArchLinux มันหายไปเป็น unpigz:
$ time -p ./gzlc.pl spy.gz
1154737
จริง 4.49
ผู้ใช้ 4.47
sys 0.01
กับ
$ time -p unpigz -c spy.gz | ห้องสุขา -l
1154737
จริง 3.68
ผู้ใช้ 4.10
sys 1.46
และ
$ time -p zcat spy.gz | ห้องสุขา -l
1154737
จริง 6.41
ผู้ใช้ 6.08
sys 0.86
เห็นได้ชัดว่าการใช้unpigz -c file.gz | wc -l
เป็นผู้ชนะที่นี่ทั้งในแง่ของความเร็ว และบรรทัดคำสั่งง่าย ๆ นั้นแน่นอนว่าการเขียนโปรแกรมนั้นสั้น