Y&S SoftWareのホームページ
使いかってのいいソフトウェアを開発します

コルーチンの世界

コルーチンとは何?

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 を使うのが主流になっています。