我只是在判断Coroutine调度员的行为.因此,我试图了解每个调度程序可以创建多少个线程.为了判断这一点,我创建了一个从1到1_000_000的循环语句.
在每个循环迭代中,我使用Dispatcher.IO创建了一个协程,但是当我看到输出时,它并没有创建1_000_000协程,所有这些都是DefaultDispatcher-Worker线程,并且它总是在40000-50000范围内随机停止执行.
但是,当我用Dispatcher.UnLimited替换Dispatcher.IO时,它实际上确实创建了所有1_000_000个协程,并且所有这些都是在主线程上创建的.
因此,我需要一些帮助来理解Dispatcher.IO在这种情况下失败的原因.
Dispatcher.IO:
fun main() {
println("Start of main")
val handler = CoroutineExceptionHandler { _, e -> e.printStackTrace() }
runBlocking {
for (i in 1..1000000) {
CoroutineScope(Dispatchers.IO + CoroutineName("Dispatchers.IO")).launch(handler) {
println("${Thread.currentThread().name} task number is :$i")
}
}
}
println("End of main")
}
Dispatchers.Unconfined
fun main() {
println("Start of main")
val handler = CoroutineExceptionHandler { _, e ->
e.printStackTrace()
}
runBlocking {
for (i in 1..1000000) {
CoroutineScope(Dispatchers.Unconfined + CoroutineName("Dispatchers.Unconfined")).launch(handler) {
println("${Thread.currentThread().name} task number is :$i")
}
}
}
println("End of main")
}
提前谢谢你