Perl對完成其任務的線程做了什麼?它是否讓它閒置或只是殺死它?下面我有一個基本的代碼結構,我想知道如何最優化它。Perl中的多線程管理
use threads;
use Thread::Semaphore
my $s = Thread::Semaphore->new($maxThreads);
my @threads;
my $thread;
foreach my $tasktodo (@tasktodo) {
$s->down();
$thread = threads->new(\&doThis);
push @threads, $thread;
}
foreach my $thr (@threads) {
$thr->join();
}
sub doThis {
# blah blah
# completed, gonna let more threads run with $s->up()
$s->up();
}
在這種情況下,一旦線程完成,我想釋放資源讓更多線程運行。我很擔心在循環結束時加入線程。如果在整個程序生命週期中它將創建4個線程,當加入時@threads
仍然有4個線程?
比方說$maxThreads
是2,它會運行2個線程,然後當這兩個線程完成時,它將被終止並運行2個線程。最後它只會加入或等待這兩個線程在運行?
編輯:我也不在乎這些線程的返回值,這就是爲什麼我想釋放資源。我加入的唯一原因是我希望在繼續執行腳本之前完成所有線程的完成。再一次,這是最好的實現嗎?
請叫它'Perl',不'PERL'或'perl'至少'珍珠' – 2013-08-05 08:43:38
對不起,現在我知道了。你能回答我的問題嗎? – kotsumu