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