Thread[#45,http-nio- 8080-exec-1,5,main] Finished task on thread: Thread[#74,kotlinx.coroutines.DefaultExecutor, 5,main] Delay で suspend Suspend から coroutine を復帰 させるのはタイマー⽤のイベント ループ DefaultExecutor Spring の suspend ハンドラは、 Dispatchers.Unconfined で起動 している (ポイント!) Dispatchers.Unconfined は復帰後の thread pool を明⽰的に指定しないため、 復帰のために利⽤されたスレッドで復帰後の 処理が実⾏される ↓ 1 本しかない DefaultExecutor でその後の 処理が実⾏されてしまうので、 スループットが著しく低下する https://github.com/spring-projects/spring-framework/issues/33788 suspend fun ioHeavyAfterDelayTask(): String { logger.info("Started task on thread: ${Thread.currentThread()}") delay(1000) Thread.sleep(1000) logger.info("finished task on thread: ${Thread.currentThread()}") return "Simulating I/O finished" } 思わぬスレッドで処理が実⾏されうる