コルーチンの世界
コルーチンとは何?1. 普通の世界=スレッドの世界
プログラムは基本的に スレッド の上で動きます。
1つのスレッドは1つの処理を順番に実行します。
Thread.sleep(1000) すると、そのスレッドは1秒間ずっと止まって他のことができません。
→ Android の UIスレッド(メインスレッド)が止まると、アプリが固まって「応答なし」になります。
2. コルーチンの世界
コルーチンは 軽量な並行処理の仕組み です。
スレッドを直接増やすのではなく、1つのスレッドの上で「処理を分けて順番に動かす」仕組み を提供します。
しかも「一時停止(suspend)」と「再開(resume)」ができます。
スレッドは「人間がずっと走って処理する」イメージ。
コルーチンは「同じ人間が仕事を小分けにして、必要なときにちょっと置いて、別の仕事をやって、また戻って再開できる」イメージ。
コルーチンの世界でできること
一時停止 (suspend)
→ 重い処理や待ち時間をスレッドを止めずに表現できる。
再開
→ 待ちが終わったら処理を続けられる。
スレッドを気にせず非同期処理を書ける
→ 普通なら Callback hell や Promise chain が必要な場面も、同期処理のように書ける。
実際のイメージ
GlobalScope.launch {
println("開始")
val data = fetchData() // suspend fun 呼び出し
println("取得結果: $data")
println("終了")
}
suspend fun fetchData(): String {
delay(2000) // 2秒待つが、スレッドは止まらない
return "データ"
}
delay(2000) は「2秒後に再開」という予約をして処理を一時停止。
その間、スレッドは解放されて別の仕事 をできます。
2秒後に fetchData の続きを再開。
→ スレッドを効率的に使える世界 が「コルーチンの世界」です。
スレッドの世界 = 「処理は止めたら全部止まる」
コルーチンの世界 = 「処理を止めても、スレッド自体は自由に他の仕事を続けられる」
だから Android や Kotlin で非同期処理を書くときは、
コルーチンをうまく使い suspend fun を使うのが主流になっています。