以下不會出現在併發線程運行如我所料,而是每個處理塊,直到它完成:如何在perl中運行併發線程?
my @arr = (1,2,3,4);
foreach (@arr) {
threads->new(\&doSomething, $_)->join;
}
sub doSomething {
my $thread = shift;
print "thread $thread\n";
sleep(5);
}
換句話說,這似乎是在執行相同非螺紋版本會:
my @arr = (1,2,3,4);
foreach (@arr) {
doSomething($_);
}
我正在運行的activeperl v5.10.1 mswin32 86多線程
如何我運行得併發線程?
我已經嘗試過 - 只是一次產卵,然後遍歷線程並加入,但只要第一次連接被調用,它就會阻塞。這幾乎就像我需要屈服,直到每個線程完成,然後加入,但我不太確定如何做到這一點。 – user210757 2010-06-22 16:37:50
確切地說。 'join'是一個阻塞操作。但是當主進程等待'join'返回時,已經產生的線程將繼續運行。在這種情況下,如果您產生了所有線程,然後加入,您會期望第一次加入呼叫需要約5秒鐘,而其他所有加入呼叫都很短。 – mob 2010-06-22 16:44:27
標記爲答案。列表(),結合is_joinable是我需要 - 謝謝 – user210757 2010-06-22 17:39:22