如何控制线程数?

fir*_*cat 3 perl6

#The @url.elems >= 10000
    for @url -> $url {
       start {
          say $url;
          sleep(1);
       }
    }
Run Code Online (Sandbox Code Playgroud)

如何控制线程数?

Eli*_*sen 11

在回答问题之前:您显示的代码丢失了Promise返回的start.你可能想要:

await do for @url -> $url {
   start {
      say $url;
      sleep(1);
   }
}
Run Code Online (Sandbox Code Playgroud)

这将等到所有启动块都完成.

回到你的问题:RAKUDO_MAX_THREADS可以在运行程序之前设置环境变量到将创建的最大线程数(默认值为16).

另一种在运行时也能运行的方法是动态创建一个新的ThreadPoolScheduler对象:

my $*SCHEDULER = ThreadPoolScheduler.new(max_threads => 32);
Run Code Online (Sandbox Code Playgroud)

任何可以看到此版本的线程代码现在都$*SCHEDULER将使用此调度程序,该调度程序有32个可用线程.