Threads不用说肯定是最经典的多线程管理,但是如果你有以下需求:
我就想设置一个数,比如8,之后我大循环每次开始8个线程同时工作,哪个跑完了再补一个,保持有最大8个线程工作
这样的话,最简单的方法就是:Parallel::ForkManager包
cpan安装好或者直接拷贝到文件夹下,之后4行代码:
use Parallel::ForkManager;
my $maxThreads=8;
my $ps=Parallel::ForkManager->new($maxThreads);
for my $i(0..100){
my $pid = $ps->start and next;
#这里是你需要多线程运行的代码=-=;
#比如:
print "$i\n";
sleep(rand(3));
$ps->finish;
}
$ps->wait_all_children;
就是这么简单,其他细节可以看这个包的文档。
效率没测试过,但是感觉,和那些成熟的包应该还是没法比。