繊維、コルーチン、緑色の糸に違いはありますか?


57

今日、私は繊維、コルーチン、緑の糸についてインターネットでいくつかの記事を読んでいた。これらの概念は非常に共通しているようだが、特に繊維とコルーチンについて話すときは、わずかな違いがある。

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

更新:繊維とコルーチンの区別に特に優れているのは、コルーチンと繊維識別(N4024 C ++ドラフト)文書です。

回答:


106

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

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

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


13
私は自分自身で言うことができる-この答えは私にとって非常に貴重です。私はこれについてロバートと意見を共有します。
DejanLekic

「幅広いトピックの要約はウィキペディアの専門です。ウィキペディアは、このコンテンツの提供と文化指向の育成に重点を置いて最適化されています。検索エンジンでこれを探している人には、通常、2つの直接競合するコンテンツの例が提示されます。1つはSEネットワークで、もう1つはウィキペディアで... 「
ブヨ

コルーチンとファイバーは非常に密接に関連していると考えられることに注意してください。おそらく同じことです。コルーチンが必要な場合は、ファイバーを介して非常に少ない労力で実装でき、逆も同様です。
cHao 14

9
それらがどのように異なるかを説明しません。これらの定義はすべて、かなり同等に見えます。
長谷

1
@gstackoverflow:JavaスレッドはOSスレッドです。JVMはOSを介してそれらをスケジュールします。
ロバートハーヴェイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.