【こるーちん】
コルーチン とは?
💡 一時停止と再生ができる、関数版レコーダー
📌 このページのポイント
- 通常の関数と違い、処理の途中で中断(yield/suspend)して後から再開できる
- Kotlin、Python、C#、Luaなど多くの言語でサポートされている
- async/awaitの裏側はコルーチンで実装されていることが多い
- ジェネレータはコルーチンの一種で、値を逐次生成するのに使われる
コルーチンって普通の関数と何が違うの?
普通の関数は呼び出したら最後まで一気に実行されるけど、コルーチンは途中でyieldやsuspendして一時停止できるんだ。後から再開すると、止めたところから続きが動くよ
それって何がうれしいの?
たとえば大量のデータを処理するとき、全部メモリに載せなくても1件ずつyieldで返せる。非同期I/Oでも、待ち時間に他の処理を進められるから効率的だよ
async/awaitとは関係あるの?
実はasync/awaitの裏側はコルーチンで実装されてることが多いんだ。awaitで中断して、I/Oが完了したら再開する。Kotlinではまさにコルーチンとして明示的に扱えるよ
スレッドとはどう違うの?
スレッドはOSが切り替えタイミングを決めるけど、コルーチンはプログラマが明示的に中断ポイントを決める。だからコンテキストスイッチのコストが低くて、数万個のコルーチンを同時に動かすこともできるんだよ
まとめ:ざっくりこれだけ覚えればOK!
「コルーチン」って出てきたら「途中で止めて再開できる関数」と思えればだいたいOK!
📖 おまけ:英語の意味
「Coroutine」 = 協調ルーチン
💬 Co(協調)+ Routine(手続き)で、お互いに処理を譲り合いながら動くイメージだよ