in kotlinx-coroutines-core/jvm/src/scheduling/CoroutineScheduler.kt [556:605]
override fun toString(): String {
var parkedWorkers = 0
var blockingWorkers = 0
var cpuWorkers = 0
var dormant = 0
var terminated = 0
val queueSizes = arrayListOf<String>()
for (index in 1 until workers.currentLength()) {
val worker = workers[index] ?: continue
val queueSize = worker.localQueue.size
when (worker.state) {
WorkerState.PARKING -> ++parkedWorkers
WorkerState.BLOCKING -> {
++blockingWorkers
queueSizes += queueSize.toString() + "b" // Blocking
}
WorkerState.CPU_ACQUIRED -> {
++cpuWorkers
queueSizes += queueSize.toString() + "c" // CPU
}
WorkerState.DORMANT -> {
++dormant
if (queueSize > 0) queueSizes += queueSize.toString() + "d" // Retiring
}
WorkerState.TERMINATED -> ++terminated
}
}
val state = controlState.value
return "$schedulerName@$hexAddress[" +
"Pool Size {" +
"core = $corePoolSize, " +
"max = $maxPoolSize}, " +
"Worker States {" +
"CPU = $cpuWorkers, " +
"blocking = $blockingWorkers, " +
"parked = $parkedWorkers, " +
"dormant = $dormant, " +
"terminated = $terminated}, " +
"running workers queues = $queueSizes, " +
"global CPU queue size = ${globalCpuQueue.size}, " +
"global blocking queue size = ${globalBlockingQueue.size}, " +
"Control State {" +
"created workers= ${createdWorkers(state)}, " +
"blocking tasks = ${blockingTasks(state)}, " +
"CPUs acquired = ${corePoolSize - availableCpuPermits(state)}" +
"}]"
}