私はKotlin Coroutinesで実験し、次のコードを持っている:ローマElizarovの別のコルーチンにanswer関連の質問によるとマルチスレッド使用Kotlinコルーチン
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 コルーチンを複数の スレッドを使用するForkJoinPool.commonPool()に送り、この例では複数のCPUで実行されます。の数に等しいデフォルトで ;別個またはカスタムプールを必要とするアプリケーションの場合
」、 ForkJoinPoolが所定の目標並列レベルで構成することができる:ジャワ8 documentationによれば
利用可能なプロセッサ。
なぜ3つのワーカースレッドが使用されているのですか?非同期タスクの数を1000以上に増やしても、同じ3つのワーカースレッドがあります。
マイ設定:(Hyper-threadingと、このように4つの見えコア)デュアルコアCPUを搭載した マック/ハイシエラ、Kotlin 1.2、kotlinx-コルーチンコア:0.19.3とJVM 1.8
私はそれを見逃している... :)ありがとうございます! –