सभी पाइपलाइनों के साथ समस्या यह है कि आप अनिवार्य रूप से काम को दोगुना कर रहे हैं। कोई फर्क नहीं पड़ता कि कितनी तेजी से विघटन हो रहा है, डेटा को अभी भी दूसरी प्रक्रिया में बंद करने की आवश्यकता है।
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]': $!";
मैंने इसे एक पुराने 2010 मैकबुक प्रो पर 13 एमबी रैम और एक पुराने थिंकपैड T400 के साथ 8 जीबी रैम के साथ पहले से कैश में पहले से ही 13 एमबी की गज़िप संपीड़ित फ़ाइल (1.4 जीबी तक डिकॉम्प्रेस) के साथ आज़माया । मैक पर, पर्ल स्क्रिप्ट पाइपलाइनों का उपयोग करने की तुलना में काफी तेज थी (5 सेकंड बनाम 22 सेकंड), लेकिन आर्चलिनक्स पर, यह अनपीग से हार गया:
$ समय -p ./gzlc.pl spy.gz
1154737
असली 4.49
उपयोगकर्ता 4.47
sys 0.01
बनाम
$ समय -p unpigz -c spy.gz | wc -l
1154737
वास्तविक 3.68
उपयोगकर्ता 4.10
सीस 1.46
तथा
$ समय -p zcat spy.gz | wc -l
1154737
असली 6.41
उपयोगकर्ता 6.08
सीस 0.86
जाहिर है, unpigz -c file.gz | wc -l
गति के संदर्भ में दोनों का उपयोग करना यहां विजेता है। और, यह सरल कमांड लाइन निश्चित रूप से एक प्रोग्राम लिखने के लिए धड़कता है, हालांकि कम है।