起初,我的perlskills有限,所以请记住这一点.;)
我编写了一个perlscript,它为一个目录编制索引并为其中的每个文件做一些事情.
处理文件需要一些时间.在1到5分钟之间,每个CPU负载接近100%(一个核心).我的想法是,因为我有一个四核cpu,一次处理多个文件,这导致我perl线程.
所以这是我的问题.
1)我的假设是正确的,perl线程是自动分配给多个核心的吗?
2)我发现这个代码示例做了我需要的,我想但我无法弄清楚,如何始终只保持8个线程活动.该示例启动静态计数线程,并在处理它们时完成.但是,在我的情况下,我要处理50个文件,但同时只有8个线程处于活动状态.
所以它应该是这样的:读取目录,为8个第一个文件启动8个线程,并保持8个线程工作,直到处理完所有文件.
#!/usr/local/roadm/bin/perl
# This is compiled with threading support
use strict;
use warnings;
use threads;
use threads::shared;
print "Starting main program\n";
my @threads;
for ( my $count = 1; $count <= 10; $count++) {
my $t = threads->new(\&sub1, $count);
push(@threads,$t);
}
foreach (@threads) {
my $num = $_->join;
print "done with $num\n";
}
print "End of main program\n";
sub sub1 {
my $num = shift;
print "started thread $num\n";
sleep $num;
print "done with thread $num\n";
return $num;
}
Run Code Online (Sandbox Code Playgroud)
资料来源:https://wiki.bc.net/atl-conf/pages/viewpage.action?pageId = 20548191
我现在搜索了几个小时,但没有找到一个例子,怎么做.当有人能给我一个提示如何开始时会很好.
谢谢.
perl中的线程是重量级的; 他们花时间和CPU来启动和时间,CPU和内存来共享它们之间的数据(并要求你仔细检查你用于线程安全的模块).
你的分叉往往好多了; Parallel :: ForkManager使这很容易.
| 归档时间: |
|
| 查看次数: |
4542 次 |
| 最近记录: |