我一直在做一些研究,我得到了這種情況。如果要寫入STDOUT(屏幕),則無法執行多線程腳本,該腳本可以更簡單地單一線程腳本來打印數據。但是,如果你寫一個這樣的文件:性能使用標準輸出(屏幕)vs普通文件
myPrinter.perl > myPrint
結果的變化,你可以看到,多線程的方式得到更好的時間。我的疑問是,既然STDOUT(屏幕)或輸出文件都是共享資源,不會是訪問時間類似嗎? 爲什麼多線程方法只能執行更好的文件寫入?
,我在實驗中使用的Perl腳本是:
單線程
for my $i (1..100000000){
print("things\n");
}
多線程
use threads;
use Thread::Queue 3.01 qw();
use constant NUM_WORKERS => 4;
sub worker {
for my $i (1 .. 25000000){
print("things\n");
}
}
my $q = Thread::Queue->new(); #::any
async { while (defined(my $job = $q->dequeue())) { worker($job); } }
for 1..NUM_WORKERS;
for my $i (1 .. 4){
$q->enqueue($i);
}
$q->end();
$_->join for threads->list;
現金:隊列執行拍攝從其中一個ikegami的答案。
[患有緩衝嗎?](http://perl.plover.com/FAQs/Buffering.html) – ThisSuitIsBlackNot
「_to the STDOUT_」是什麼意思......實際上讓它出現在屏幕上?這將需要更長的時間,所有的渲染,重繪和什麼。計時單線程,屏幕與重定向。我不知道它如何影響多線程,但我的猜測是它只會更糟。此外,正如ThisSuitIsBlackNot所說,緩衝可能會有所不同。 – zdim