以下内容似乎不会像我预期的那样在并发线程中运行,而是每个进程都会阻塞,直到它完成为止。
换句话说,它似乎执行的方式与非线程版本相同:
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-x86-multi-thread。
如何在perl中运行并发线程?
join
是一个阻塞操作。但是已经被创建的线程在主进程等待join
返回时仍将继续运行。在这种情况下,如果你先生成所有线程再进行join
,你会期望第一个join
调用大约需要 5 秒钟时间,而其他所有的join
调用则非常短。 - mob