Parallel processing 需要Perl 6中的简单并行示例吗
我试图同时学习Perl 6和并行性/并发性 对于一个简单的学习练习,我有一个包含550个“.htm”文件的文件夹,我想要所有这些文件中代码行的总和。到目前为止,我有:Parallel processing 需要Perl 6中的简单并行示例吗,parallel-processing,raku,Parallel Processing,Raku,我试图同时学习Perl 6和并行性/并发性 对于一个简单的学习练习,我有一个包含550个“.htm”文件的文件夹,我想要所有这些文件中代码行的总和。到目前为止,我有: use v6; my $start_time = now; my $exception; my $total_lines = 0; my @files = "c:/testdir".IO.dir(test => / '.' htm $/); for @files -> $file { $total_line
use v6;
my $start_time = now;
my $exception;
my $total_lines = 0;
my @files = "c:/testdir".IO.dir(test => / '.' htm $/);
for @files -> $file {
$total_lines += $file.lines.elems;
CATCH {
default { $exception = $_; } #some of the files error out for malformed utf-8
}
}
say $total_lines;
say now - $start_time;
这在大约3秒钟内得出577449的总数
我将如何重写它以利用Perl 6并行性思想?我意识到节省的时间不会太多,但可以作为概念证明。实施克里斯托夫的建议。这个数字比我原来的帖子略高,因为我现在可以使用EncodeLatin1读取格式错误的UTF-8文件
use v6;
my $start_time = now;
my $exception;
my @lines;
my $total_lines = 0;
my @files = "c:/testdir".IO.dir(test => / '.' htm $/);
await do for @files -> $file {
start {
@lines.push( $file.lines.elems );
CATCH {
default { $exception = $_; } #some of the files error out for malformed utf-8
}
}
}
$total_lines = [+] @lines;
say $total_lines;
say now - $start_time;
use v6;
my $start_time = now;
my @files = "c:/iforms/live".IO.dir(test => / '.' htm $/);
my $total_lines = [+] @files.race.map(*.lines(:enc<latin1>).elems);
say $total_lines;
say now - $start_time;
使用v6;
我的$start\u time=现在;
my@files=“c:/iforms/live”.IO.dir(test=>/'.'htm$/);
我的$total_line=[+]@files.race.map(*.lines(:enc.elems);
说$total_行;
现在说-$start\u time;
类似于我的$total_line=[+]@files.race.map(*.lines(:enc.elems)
,与没有的情况相比。race
很棒。与。比赛平均大约需要2秒。没有比赛,平均需要2.6秒。谢谢。奇怪的是,当我多次运行这段代码时,我会得到各种各样的$total_行。我运行了5次,得到的计数是:575967575367570325574797576222。关于是什么导致了这种情况,有什么想法吗?还没有-我从中吸取了教训-我仍在学习所有这些是如何运作的。不知道是否需要对$total_行更新进行任何形式的锁定-可能是让块返回行数,并对等待之外的总数求和。map/reduce style.Ok-稍微调整了一下,以使用在并行代码之外求和的数组中捕获元素。运行更新的代码。看到$total_行:573705、577449、575867、577449、575407。我同意你的观点,试着从你链接的blog.perl.org文章中拼凑出来。你使用的是哪一版本的perl6?矿山使用moarVM 2015.12提供稳定的答案(假设我运行的文件数量有限)。