Multithreading Perl中的多线程管理
Perl对已经完成任务的线程到底做了什么?它是让它闲置还是杀死它?下面我有一个基本的代码结构,我想知道如何最好地优化它Multithreading Perl中的多线程管理,multithreading,perl,join,semaphore,Multithreading,Perl,Join,Semaphore,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(
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个线程完成时,它将被终止并运行另外2个线程。最后,它将只加入或等待这两个线程运行
编辑:我也不关心这些线程的返回值,这就是为什么我想释放资源。我加入的唯一原因是我希望在继续脚本之前完成所有线程。同样,这是最好的实现吗?终止线程的常用方法是使用适当的返回值从入口点函数返回EXPR join函数等待这个返回值,并清理线程。所以,在我看来,你的代码是好的 退出线程的另一种方法是:
threads->exit(status);
此外,您还可以通过以下方式获得可连接线程的列表:
threads->list(threads::joinable);
终止线程的常用方法是使用适当的返回值从入口点函数返回EXPR join函数等待这个返回值,并清理线程。所以,在我看来,你的代码是好的 退出线程的另一种方法是:
threads->exit(status);
此外,您还可以通过以下方式获得可连接线程的列表:
threads->list(threads::joinable);
请叫它
Perl
,而不是Perl
或Perl
至少Pearl
对不起,现在我知道了。你能回答我的问题吗?请叫它Perl
,而不是Perl
或Perl
至少Pearl
对不起,现在我知道了。你能回答我的问题吗?谢谢,我对此感到不确定。我知道退出线程,但我不知道是否有必要在线程结束时退出(因为它现在正在工作,我还没有对它进行压力测试,很快就会)。谢谢,我对此感到不确定。我知道退出线程,但我不知道是否有必要在线程结束时退出(因为它现在正在工作,我还没有对它进行压力测试,很快就会)。