如何计算线程[Kotlin]的线程池?

如何计算线程[Kotlin]的线程池?,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,考虑以下代码: suspend fun childTaskExecutor() { GlobalScope.future(Dispatchers.Default) { val currentThread = Thread.currentThread() logger.info("[childTaskExecutor] running on ${currentThread.name} group : ${currentThread.threadG

考虑以下代码:

suspend fun childTaskExecutor()  {
    GlobalScope.future(Dispatchers.Default) {
        val currentThread = Thread.currentThread()
        logger.info("[childTaskExecutor] running on ${currentThread.name} group : ${currentThread.threadGroup}")
    }.awaitOrNull()
}
运行此命令时,输出为: 在DefaultDispatcher-worker-9组上运行的[childTaskExecutor]java.lang.ThreadGroup[name=main,maxpri=10]

当我将上下文更改为
Dispatchers.IO
时,输出为:
在DefaultDispatcher-worker-6组上运行:java.lang.ThreadGroup[name=main,maxpri=10]


我想知道线程属于哪个线程池(IO、默认、未定义)。有什么方法可以做到这一点吗?

协同程序调度程序与线程池不同。协程调度器由线程池支持,但它们不需要使用不同的线程池。事实上,某些内置Dispatcher的线程池实际上是重叠的。这就是为什么即使使用
Dispatchers.IO
也会看到相同的DefaultDispatcher线程

这种具有重叠线程池的布局使协同路由更加高效。当您从
Dispatchers.Default
切换到
Dispatchers.IO
时,运行时不一定要切换线程

如果您想查看当前使用的是哪个协同路由调度器,可以从协同路由上下文中获取它。像这样:

// Prints the name of the coroutine dispatcher.
println(coroutineContext[CoroutineDispatcher])

请注意,您使用
CoroutineDispatcher
访问的伴生对象当前是实验性API,因此您需要选择使用它。

只是一点提示,访问coroutineContext的元素时不需要
.Key
。e、 g.如果要访问当前文件,可以编写
coroutineContext[CoroutineDispatcher]
,或
coroutineContext[Job]
job@AdrianK啊,很好。谢谢。好的,线程池重叠了。但是假设我已经为Dispatchers设置了一个最大限制。默认为64,IO为64。我希望我仍能获得总共128个线程。@Shivangtripath我认为如果您为它们配置最大限制,它们仍将共享线程池。我不确定你是否能得到128个线程。