#The @url.elems >= 10000 for @url -> $url { start { say $url; sleep(1); } }
如何控制线程数?
解决方法
在回答问题之前:您显示的代码会丢失由start返回的Promise.你可能想要:
await do for @url -> $url { start { say $url; sleep(1); } }
这将等到所有启动块都完成.
回到你的问题:环境变量RAKUDO_MAX_THREADS可以在运行程序之前设置为将创建的最大线程数(默认值为16).
另一种在运行时也能运行的方法是动态创建一个新的ThreadPoolScheduler对象:
my $*SCHEDULER = ThreadPoolScheduler.new(max_threads => 32);
任何可以看到这个版本的$* SCHEDULER的线程代码现在都将使用这个有32个线程可用的调度程序.