2009-11-03 14 views

cevap

5

ikili unzip yürütmek ederse, süreç/exec ve

  1. (estiren süreç boyunca)
  2. tüketmek yeni sürecini daha fazla bellek örneğini

Sen çatal olacak Ayrıca, unzip doğru yolu ile yapılandırmanız gerekir. Bütün bunlar göz önüne alındığında kütüphane yaklaşımını şiddetle tercih ederim.

+3

Bu türden bir düşünceyi asla anlayamıyorum. Bir fork/exec çok hızlı bir süreçtir, herhangi bir zamanda kabuk betiklerini okuyarak veya yazarak geçiren herkes bunun farkındadır. Unzip binary'nin kendisi tarafından tüketilen hafıza, algoritmanın maliyetlerine ve (özellikle) içindeki verilere göre önemsizdir. Ve her Linux dağıtımında/usr/bin/unzip gemileri varsayılan olarak BSD'ler ve Cygwin'e de inanıyorum. Örnek kod aşağıdaki gibi önemsiz değildiyse: $ $ my $ input, "unzip -cp $ ARCHIVE $ FILE |", basit seçeneği tercih ederim. –

+1

Yukarıdaki * ile aynı fikirdeyim *, eğer ağır yüklü bir sunucunuz varsa, kaynak tüketiminiz fork/exec modeliyle artacaktır. Pid tahsisi, süreçler arası akış tahsisi, hafıza tahsisi (yazma üzerine yazma için izin). Bağımsız süreçler için fork/exec modelinden memnunum. Sunucu modelleri için, en az kaynak ayırma oranına sahip olan modele bu şekilde yaklaşmayı tercih ediyorum. –

+1

Bir döngüde, özellikle de sıcak bir döngüde forking iseniz, performans sorunlarını kesinlikle göreceksiniz. Eğer bir döngüde değilseniz ya da saniyede bir veya birkaç saniyede bir oranla işliyorsanız, o zaman sorun olmaz. Ayrıca, 'unzip' komutunu sistem yerine bir kütüphane kullanmak bir avantaj olabilir; kütüphane daha yeni ve daha az araba olabilir. –

14

Archive::Zip documentation göre sen Archive::Extract kullanarak daha iyi olurdu:

sen sadece Arşiv kullanarak bakmak tavsiye edilir ayıklanması fermuarlar (ve/veya diğer arşivler) olacak olursa :: Özü bunun yerine, kullanımı çok daha kolay olduğu ve arşive özgü işlevselliği dışa vurduğu için.

Bu ilginç çünkü Archive::Extract will try Archive::Zip first and then fall back to the unzip binary if it fails. Archive :: Zip tercih edilen seçenek olarak görünüyor.

Arşiv :: Zip, zlib sistem kitaplığına düşük düzeyli bir arabirim olan Compress::Raw::Zlib kullanır; Bu yüzden performans açısından benzer olacak anlamına gelen saf bir Perl uygulaması değil unzip. Yani, bir başka deyişle, performans açısından, Archive :: Zip'den unzip'u seçmenin bir nedeni yok.

+3

'Archive :: Extract' kullanıyorsanız, diğer sıkıştırma formatları için de çalışır. –

1

Bir sorun bellekte. Archive::Tar'un bellek sızıntısına sahip olduğunu (üretim web sunucusu çöktü) zor yoldan bulduk. Bu nedenle, bir sistem yerine bir modülün harici komutla çağırılması iyi bir fikirdir (mantığa yönelik diğer yanıtlara bakın), modülün herhangi bir kavrayışının bulunmadığından emin olmanız gerekir.