【发布时间】:2021-01-12 09:21:22
【问题描述】:
据我了解,Dispatchers.IO 可以创建的最大线程数为 64,但我的结果有点棘手。
这是我的代码。
repeat(500) {
CoroutineScope(Dispatchers.IO).launch {
println(Thread.currentThread().name)
}
}
这就是结果。
...
DefaultDispatcher-worker-18
DefaultDispatcher-worker-46
DefaultDispatcher-worker-17
DefaultDispatcher-worker-47
DefaultDispatcher-worker-69
DefaultDispatcher-worker-64
DefaultDispatcher-worker-66
DefaultDispatcher-worker-67
DefaultDispatcher-worker-68
DefaultDispatcher-worker-41
...
为什么我的线程池计数大于 64? 这是否意味着我的实际线程已创建超过 64 个?
感谢您的阅读! 请帮帮我
【问题讨论】:
-
Dispatchers.IO从CommonPool租用的最大线程数为 64。Dispatchers.Default仍然可以创建更多线程,如果Dispatchers.IO中的协程都忙于你的核心数,Dispatchers.Default仍然可以创建更多线程。 In playground,它的线程似乎没有超过 64 个。你是否也在其他调度程序中启动? -
不,这就是代码中的全部内容。并且 afik,默认调度程序可以创建多达 CPU 核心数量的线程。如果这是正确的,我认为 Default Dispatchers 将创建的最大线程数仅为 12...不是吗?为什么我的协程会这样工作?
-
在我的例子中,我使用 IO Dispatchers 就是那个代码。所以即使你是对的,我的代码还是有点棘手。
标签: android kotlin kotlin-coroutines coroutine