2017-01-20 6 views
2

緑色のスレッドについて読んでいました。これらのスレッドはVMによって、または実行時にosではなく、理解できませんでしたが、次のステートメントを理解できません。グリーンスレッドのI/Oブロッキング

緑色のスレッドがブロッキングシステムコールを実行すると、そのスレッドはブロックされているだけでなく、そのプロセス内のすべてのスレッドがブロックされます。

誰でも可能ですか?

+0

グリーンスレッドはそれ自身で並行処理を保証するものではなく、スケジューラ、グリーンスレッドランタイム、またはエンドユーザが呼び出しを非同期に実行する。しかし、実際に私は考えていない:pリンクで参照されている本は、より多くのコンテキストを提供することがあります – dm03514

答えて

2

これはかなり単純です。

"グリーンスレッド"は、実際のOSがOSレベルのプロセスやスレッドの中でそれらのリソースをスケジュールするのと同様に、VM内でプログラム的に実装されています。

OSの観点から見ると、VM自体は1つのスレッドしかないので、ブロッキングシステムコール(内部的に管理する「グリーンスレッド」の1つに代わって)を行うとき、この単一のスレッドは自然にブロックされ、 "Green Threads"のスケジューリングを含む何もできないので、 "World Stop"も可能です。

+0

ありがとう。だから、私は単一のErlangプロセスが緑のスレッドを何千も作成できると結論づけることはできますが、OSによって単一のスレッドと見なされることになります。 –

+0

@Mukul Chakravarty Erlangとは少し複雑です(かなり高度なVMを使用しているため)、一般的な原則がそのまま適用されます。 Erlang VMは、複数のErlangプロセス* P *を実行できるスケーラとして動作する多数のOSレベルのスレッド* S *(通常は利用可能なCPUコアの数に等しい)を使用します。スレッド ")。また、IO操作のために、いくつかの補助「非同期」スレッドを使用します。 詳細については、http://erlang.org/pipermail/erlang-questions/2010-September/053327.htmlを参照してください。 – zeppelin

+0

事を明確にしてくれてありがとう。 –

関連する問題