# New Ticket Created by Steve Piner # Please include the string: [perl #129779] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/Ticket/Display.html?id=129779 >
This could be a stupid user problem, in which case I apologise for wasting your time. Simple concurrency demonstrations seem to work; the following completes in just over a second: perl6 -e 'await Promise.allof(start {sleep 1}, start {sleep 1}, start {sleep 1});say now - INIT now' However if the started tasks are doing any CPU-intensive work, they seem to take much longer than if they had been run sequentially, without using promises at all. To reproduce the issue, please run this script. ----- use v6; my $r = 2_000_000; say "Counting to $r"; my ($start, $setup, $stop); $start = now; { my ($i, $j); $j = $r; loop ($i = 0; $i < $j; $i++) { } } $stop = now; say "Non-promise iteration: {$stop - $start}"; my @promises; $start = now; @promises.push(start { my ($i, $j); $j = $r; loop ($i = 0; $i < $j; $i++) { } }); $setup = now; await Promise.allof(@promises); $stop = now; say "One iteration: {$stop - $start} (setup: {$setup - $start})"; @promises = (); $start = now; for (1..16) { @promises.push(start { my ($i, $j); $j = $r; loop ($i = 0; $i < $j; $i++) { } }); } $setup = now; await Promise.allof(@promises); $stop = now; say "16 iterations: {$stop - $start} (setup: {$setup - $start})"; ----- What I expected: One iteration would take roughly the same amount of time as the non-promise iteration (the sleep example above would suggest that the threading overhead would be less than 0.001s) 16 iterations would take, at worst, about 16 times as long as the line 'one iteration' above it. What happens: On a Windows 10 PC, with 6 cores (12 logical processors) C:\Users\Steve>perl6 concurrency-wtf.pl Counting to 2000000 Non-promise iteration: 0.6162481 One iteration: 2.23909643 (setup: 0.00300325) 16 iterations: 65.56993665 (setup: 0.00700654) On an Ubuntu 14.04.5 LTS PC, with 2 cores steve@prole:~/$ perl6 concurrency-wtf.pl Counting to 2000000 Non-promise iteration: 0.6948201 One iteration: 1.9678549 (setup: 0.0024696) 16 iterations: 107.1483633 (setup: 0.0474610) Also the CPU usage leaps 100% (all CPUs, all at 100%) while running, on both PCs. The PCs are mostly idle otherwise (Windows 10 - about 3% utilization, Linux - 199% idle) Perl 6 version C:\Users\Steve>perl6 -v This is Rakudo version 2016.07.1 built on MoarVM version 2016.07 implementing Perl 6.c. steve@prole:~/$ perl6 -v This is Rakudo version 2016.07.1 built on MoarVM version 2016.07 implementing Perl 6.c.