兩個腳本:擊VS的Perl/Python的:操作系統調用perfomace
的Perl
use strict;
use warnings;
use utf8;
while (1) {
my $cmd = "echo bla | grep bla";
system($cmd);
}
猛砸
while true;
do echo bla | grep bla;
done;
我在單核獲得相當顯著(約10% )CPU利用率差異。有什麼想法嗎?
這是我試圖解決的問題:我們有一些以Bash編寫的遺留腳本,每隔X秒運行一次。經過檢查,我們注意到他們消耗了大量的資源。將這些腳本重寫爲Perl/Python後,CPU利用率顯着下降。
Bash腳本大量使用調用外部程序(awk,cut,grep,sed等),而Perl/Python腳本是自包含的。我將其歸因於Bash在需要創建外部呼叫時會分叉/執行的事實,因此我們花費時間創建了數千個流程。
你是如何運行這個bash腳本的? 'system'運行'bash'還是'sh'? – 2014-11-04 03:55:58
兩者都在運行'bash'。 – 2014-11-04 03:59:19
'system'的文檔似乎表明它使用'/ bin/sh -c'來執行。這不是'bash'(至少不是在正常的bash模式下,會使用不同的初始化文件等)。但是對於真正的問題是,看起來很可能是一個嚴重依賴外部程序的shell腳本比使用內置功能的自定義編寫的perl腳本運行速度慢。 – 2014-11-04 04:02:43