如果我启动多个线程,Perl的线程连接方法是否等待第一个线程完成?

inf*_*oop 1 parallel-processing perl multithreading join

     foreach $name (@project_list)
     {
               # a thread is created for each project
               my $t = threads->new(\&do_work, $name);
               push(@threads, $t);
     } 

    foreach (@threads) {
     my $thrd = $_->join;
     print "Thread $thrd done\n";
    }

    sub do_work {
     # execute some commands here...
    }
Run Code Online (Sandbox Code Playgroud)

project_list是40个项目的列表.当我为每个项目生成一个线程时,join方法是否会等待第一个线程完成,然后转移到下一个线程,依此类推?

如果是这种情况,那么可以避免它吗?我的意思是一些线程会比其他线程更快完成所以为什么要等

如果需要更多信息,请告诉我.谢谢.

Mat*_*Mat 5

$_->join等待指定的线程$_完成.既然你按顺序推送它们,并按顺序foreach遍历列表,是的,你将首先等待第一个线程.

但这并不重要,因为你正在等待所有线程完成.如果你等待最快的终结者或最慢的终结者并不重要 - 无论如何你都会等待所有人.