All Articles

コルーチンとは?スレッドとの違いは?

コルーチンとスレッドの違いについて少し調べた内容を簡単にまとめました。

コルーチンとは

Wikipedia によると、

コルーチン(英: co-routine)とはプログラミングの構造の一種。サブルーチンがエントリーからリターンまでを一つの処理単位とするのに対し、コルーチンはいったん処理を中断した後、続きから処理を再開できる。

とのことで、コルーチンは中断・再開を制御できるのが特徴の、並行処理の一種のようです。

最近よく使われている言語では、C# (特に Unity の例が多い)、Swift、Kotlin などがサポートしています。

コルーチンとスレッドの関係

Kotlin のドキュメントの「Coroutines basics」というページからコルーチンの説明を引用します。

A coroutine is an instance of suspendable computation. It is conceptually similar to a thread, in the sense that it takes a block of code to run that works concurrently with the rest of the code. However, a coroutine is not bound to any particular thread. It may suspend its execution in one thread and resume in another one.

DeepL で翻訳すると…

コルーチンは、サスペンダブルコンピュテーションのインスタンスです。コルーチンは、他のコードと同時に動作するコードブロックを実行するという意味で、スレッドと概念的に似ています。しかし、コルーチンは特定のスレッドに縛られることはありません。あるスレッドで実行を中断し、別のスレッドで再開することができます。

とのことです。

コルーチン自体はスレッドとは異なる概念であり、いずれかのスレッドで実行されるものの、中断したタイミングからはそのスレッドで別の処理が実行されることになります。

参考

Go のゴルーチンは?

Go のゴルーチンは、コルーチンを意識しているものの、プログラマが中断・再開を制御することはできないようです。

A Tour of Go で書かれているように、「軽量なスレッド」のように理解するのがよさそうです。

参考