よくSpring WebFluxでのリアクティブプログラミングや、Kotlin Coroutinesの話で、「JDBCの処理を呼ぶとブロッキングなので意味が・・・」という話がでてきます。 が、実際に動かしてどういう挙動になるのか、なにが問題なのかを説明しているものがあまりないのでまとめてみました。 Spring WebFluxとKotlin Coroutinesを使い、ノンブロッキングとブロッキングの処理を呼んだ時の違いや、それをJDBCの処理に置き換えた時の挙動などをスレッドの動きを見ながら解説します。 ※ Spring WebFluxやORMなど各技術スタックの使い方の説明は割愛しています ブロッキングとノンブロッキングでの挙動の違い まずはブロッキングの処理とノンブロッキングの処理での挙動の違いを見てみます。 コルーチンの中でブロッキングなThread.sleep、ノンブロッキングな