这是一个glib标题,但是在玩Promises时,我想看看我可以在多大程度上延伸这个想法。在这个程序中,我是这样做的,所以我可以指定我想要做出多少承诺。Perl 6可以承诺多少个承诺?
- 在线程调度器的默认值是16个线程(rakudo/ThreadPoolScheduler.pm)
- 如果我指定的比数,程序挂起更多,但我没有得到一个警告(比如,像“太多线程” )。
- 如果我设置RAKUDO_MAX_THREADS,我可以停止程序挂起,但最终会有太多的线程竞争运行。
我有两个问题,真的。
程序如何知道它可以创建多少个线程?这比承诺的数量略多,这是值得的。
我怎么知道我应该允许多少线程,即使我可以做更多?
这是我的弱小的Macbook Air Rakudo 2017.01 4个核心:
my $threads = @*ARGS[0] // %*ENV<RAKUDO_MAX_THREADS> // 1;
put "There are $threads threads";
my $channel = Channel.new;
# start some promises
my @promises;
for 1 .. $threads {
@promises.push: start {
react {
whenever $channel -> $i {
say "Thread {$*THREAD.id} got $i";
}
}
}
}
put "Done making threads";
for ^100 { $channel.send($_) }
put "Done sending";
$channel.close;
await |@promises;
put "Done!";
其中一些可能随下一版本的Perl 6.d:https:// github而改变。com/rakudo/rakudo/pull/1004 –
这不是关于承诺,而是关于线程... –
作为一个消费者,只要我尝试做的事情真正起作用,我不在乎它是否是线程。如果承诺以其他方式实施,我会有同样的问题。 –