내가 Kotlin Coroutines 실험 및 다음 코드가 있어요 : 로마 Elizarov의 다른 코 루틴에 answer 관련 질문에 따르면멀티 스레딩 사용하여 코 틀린 코 루틴
number of cores: 4
async number:0 on thread ForkJoinPool.commonPool-worker-2
async number:2 on thread ForkJoinPool.commonPool-worker-3
async number:3 on thread ForkJoinPool.commonPool-worker-3
async number:4 on thread ForkJoinPool.commonPool-worker-3
async number:5 on thread ForkJoinPool.commonPool-worker-3
async number:1 on thread ForkJoinPool.commonPool-worker-1
async number:7 on thread ForkJoinPool.commonPool-worker-3
async number:6 on thread ForkJoinPool.commonPool-worker-2
async number:9 on thread ForkJoinPool.commonPool-worker-3
async number:8 on thread ForkJoinPool.commonPool-worker-1
:
fun main(args: Array<String>) = runBlocking {
val cores = Runtime.getRuntime().availableProcessors()
println("number of cores: $cores")
val jobs = List(10) {
async(CommonPool) {
delay(100)
println("asynC#$it on thread ${Thread.currentThread().name}")
}
}
jobs.forEach { it.join() }
}
이 내 출력
"출시로 새로운 코 루틴이 생성되는 반면 CommonPoo l coroutines을 다중 스레드를 사용하는 ForkJoinPool.commonPool()에 전달하여이 예제에서 여러 CPU에서 실행합니다. " 자바 8 documentation에 따르면
:
분리 또는 사용자 정의 풀을 필요로하는 응용 프로그램에 대한"는 ForkJoinPool 주어진 목표 병렬 처리 수준으로 구성 될 수있다; 기본적으로, 수와 동일 사용 가능한 프로세서. "
왜 3 개의 작업자 스레드가 사용됩니까? 비동기 작업의 수를 1000 개 이상으로 늘리는 경우에도 동일한 3 개의 작업자 스레드가 있습니다.
내 구성 : (Hyper-threading에 따라서 4 볼 코어) 듀얼 코어 CPU와 맥/하이 시에라, 코 틀린 1.2, kotlinx - 코 루틴 코어 : 0.19.3 및 JVM 1.8
내가 그렇게보고 싶었어 ... :) 감사합니다! –