Parallel processing 需要Perl 6中的简单并行示例吗

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

我试图同时学习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_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提供稳定的答案(假设我运行的文件数量有限)。