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();
}
在这种情况下,一旦线程完成,我想释放资源以供更多线程运行。我担心在循环结束时加入线程。如果在整个程序生命周期中会创建@threads
4个线程,加入时还会有4个线程吗?
假设$maxThreads
是 2,它会运行 2 个线程,然后当这 2 个线程完成时,它将被杀死并再运行 2 个线程。最后它只会加入或等待这两个线程运行吗?
编辑:我也不关心这些线程的返回值,这就是我想释放资源的原因。我加入的唯一原因是我希望在继续执行脚本之前完成所有线程。同样,这是最好的实现吗?