コルーチン
コルーチン(英: co-routine)とはプログラミングの構造の一種。サブルーチンがエントリーからリターンまでを一つの処理単位とするのに対し、コルーチンはいったん処理を中断した後、続きから処理を再開できる。接頭辞 co は協調を意味するが、複数のコルーチンが中断・継続により協調動作を行うことによる。
サブルーチンと異なり、状態管理を意識せずに行えるため、協調的処理、イテレータ、無限リスト、パイプなど、継続状況を持つプログラムが容易に記述できる。
コルーチンはサブルーチンを一般化したものと考えられる。コルーチンをサポートする言語には Modula-2、Simula、Icon、Lua、C#、Limbo、Swift などがある。マルチスレッドで理論的には同じことができるため、現在はそちらが使われるケースが多い。これはマルチスレッドであれば直接OSやCPUスレッドの支援を受けられることや、エントリー/リターンの構造を変えずにコードを多重化できるので、過去の言語との親和性が良いなどが理由である。一方、マルチスレッドの場合はプログラマがスレッド間の同期や排他制御を行わなければならないが、その結果スレッドが実行を続けられなくなった場合は別のスレッドを実行するために暗黙的にコルーチンを呼び出す。この点では、マルチスレッドはコルーチンの抽象度をより高めた応用と解釈することができる。
言語仕様以外の例では、マルチタスクOSやユーザスレッドにおけるコンテキストスイッチがコルーチンとなる。この点では、上記の問題は「コルーチンを言語仕様とOSやスレッドライブラリのどちらに持たせるか」とも解釈できる。この場合でもコルーチンをスレッドやタスクのスリープのために明示的に呼び出すだけでなく、割り込みや例外処理の結果暗黙的に実行する場合の両方がある。
コルーチンという名称は、メルヴィン・コンウェイの1963年の論文[1]に最初の記述がある。
関連項目
[編集]脚注
[編集]- ^ メルヴィン・コンウェイ「Design of a separable transition-diagram compiler」Communications of the ACM、第6巻、No. 7、1963年7月