【こるーちん】

コルーチン とは?

💡 一時停止と再生ができる、関数版レコーダー
📌 このページのポイント
コルーチン vs 通常の関数 通常の関数 呼び出し → 最後まで一気に実行 → 終了 途中で止められない コルーチン 実行 中断 再開 中断 再開 終了 コルーチンの実行フロー 処理A実行 yield 他の処理 処理B再開 yield 他の処理 処理C完了 中断中は他の処理にCPUを譲れる → 効率的な並行処理
コルーチンのイメージ
ひよこ ひよこ

コルーチンって普通の関数と何が違うの?

ペンギン先生 ペンギン先生

普通の関数は呼び出したら最後まで一気に実行されるけど、コルーチンは途中でyieldやsuspendして一時停止できるんだ。後から再開すると、止めたところから続きが動くよ

ひよこ ひよこ

それって何がうれしいの?

ペンギン先生 ペンギン先生

たとえば大量のデータを処理するとき、全部メモリに載せなくても1件ずつyieldで返せる。非同期I/Oでも、待ち時間に他の処理を進められるから効率的だよ

ひよこ ひよこ

async/awaitとは関係あるの?

ペンギン先生 ペンギン先生

実はasync/awaitの裏側はコルーチンで実装されてることが多いんだ。awaitで中断して、I/Oが完了したら再開する。Kotlinではまさにコルーチンとして明示的に扱えるよ

ひよこ ひよこ

スレッドとはどう違うの?

ペンギン先生 ペンギン先生

スレッドはOSが切り替えタイミングを決めるけど、コルーチンはプログラマが明示的に中断ポイントを決める。だからコンテキストスイッチのコストが低くて、数万個のコルーチンを同時に動かすこともできるんだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コルーチン」って出てきたら「途中で止めて再開できる関数」と思えればだいたいOK!
📖 おまけ:英語の意味
「Coroutine」 = 協調ルーチン
💬 Co(協調)+ Routine(手続き)で、お互いに処理を譲り合いながら動くイメージだよ
← 用語集にもどる