我有40个文件的列表,我想通过我的脚本修改它。 由于每个文件都以相同的方式处理,我想使用Threads来加速它。 因此我有这个结构:
my $threads_ = sub
{
while (defined(my $taskRef = $q->dequeue()))
{
my $work= shift(@{$workRef});
&{\&{$work}}(@{$workRef});
my $open= $q->open() - 1;
}
};
my @Working;
for( my $i = 1; $i < 8; $i++)
{
push @Working, threads->new($threads_);
}
我有这个代码为每个文件启动一个线程
foreach my $File (@Filelist)
{
$q->enqueue(['mySub',$FirstVar,$SecondVar]);
}
但它仍然需要很长时间。
我的问题是,是否有某种方法可以将每个线程分配给一个Core,以加快速度?
答案 0 :(得分:0)
我使用Parallel :: ForkManager这样的事情;它很棒。当存在可接受的标准解决方案时,我建议不要自己酿造。通过&#34;解决某些核心&#34;,我认为你的目的是将并发任务的数量限制为可用处理器的数量,ForkManager将为您执行此操作 - 只需设置最大进程数初始化ForkManager对象。
上述评论者完全正确地指出I / O最终将限制您的吞吐量,但是很容易确定何时添加更多进程无法加快速度。