web-dev-qa-db-ja.com

繊維、コルーチン、グリーンスレッドに違いはありますか?

今日、インターネットでファイバー、コルーチン、グリーンスレッドについての記事をいくつか読んでいましたが、これらの概念は非常に共通しているようですが、特にファイバーとコルーチンについて話すときは、少し違いがあります。

それらが互いに異なる点の簡潔で正しい要約はありますか?

更新: コルーチンとファイバーの区別(N4024 C++ドラフト) ドキュメントは、ファイバーとコルーチンの区別に特に適しています。

60
DejanLekic

A Fiber は、プリエンプティブマルチタスクの代わりに協調マルチタスクを使用する軽量スレッドです。実行中のファイバーは、別のファイバーが実行できるように明示的に「譲る」必要があります。これにより、カーネルやユーザースレッドよりも実装がはるかに簡単になります。

Coroutine は、サブルーチンを一般化して、特定の場所で実行を一時停止および再開するための複数のエントリポイントを許可するコンポーネントです。サブルーチンとは異なり、コルーチンは他のコルーチンを呼び出すことで終了でき、後で元のコルーチンで呼び出されたポイントに戻る場合があります。

Green Thread は、基盤となるオペレーティングシステムによってネイティブにではなく、仮想マシン(VM)によってスケジュールされるスレッドです。グリーンスレッドは、ネイティブOSの機能に依存せずにマルチスレッド環境をエミュレートし、カーネルスペースではなくユーザースペースで管理されるため、ネイティブスレッドをサポートしていない環境でも機能します。

110
Robert Harvey