問題タブ [lightweight-processes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - Erlang プロセスはカーネル スレッドにどのようにマッピングされますか?
Erlang は多くの軽量プロセスをサポートできることで知られています。これが可能なのは、これらが従来の意味でのプロセスではなく、P スレッドのようなスレッドでもなく、完全にユーザー空間内のスレッドであるためです。
これはまあまあです(実際には素晴らしいです)。しかし、Erlang スレッドはマルチコア/マルチプロセッサ環境でどのように並列実行されるのでしょうか? 別々のコアで実行するには、どうにかしてカーネル スレッドにマップする必要がありますか?
それが事実であると仮定すると、これはどのように行われますか?多くの軽量プロセスが 1 つのカーネル スレッドにマップされていますか?
または、この問題を回避する別の方法はありますか?
architecture - Erlang以外に「グリーンプロセス」に基づいているシステムは何ですか?
Green Thread(Wikipedia)でこの有益なページを読んでいたのですが、Erlang以外に「グリーンプロセス」に依存しているプログラミングシステムは他にあるのでしょうか。
編集:「グリーンスレッド!=グリーンプロセス」
グリーンプロセスベース
- Erlang
- インフェルノ
グリーンスレッドベース
- 行け
ネイティブプロセスベース
- C、C ++
更新:誰も質問に直接回答しなかったため、グリーンプロセス全般に関する詳細情報を提供する回答を受け入れました。
multithreading - 「グリーンスレッド」とErlangのプロセスの違いは何ですか?
Erlang の軽量プロセスについて読んだ後、私はそれらが「グリーン スレッド」であると確信しました。グリーンスレッドとErlangのプロセスには違いがあることを読むまで。しかし、私はそれを取得しません。
実際の違いは何ですか?
c# - .NET での Erlang スタイルの軽量プロセス
.NET で Erlang スタイルの軽量プロセスを実装する方法はありますか?
Erlang メッセージング モデル (アクター モデル) を実装するプロジェクトをいくつか見つけました。たとえば、アクスム。しかし、軽量プロセスの実装については何も見つかりませんでした。単一の OS スレッドまたは OS プロセスのコンテキストで実行される複数のプロセスを意味します。
multithreading - Haskell 軽量スレッドのオーバーヘッドとマルチコアでの使用
私は並行性と並列性に関する章である「Real World Haskell」の本を読んでいます。私の質問は次のとおりです。
Haskell スレッドは、実際には 1 つの「実際の」OS スレッド内の複数の「仮想」スレッドであるため、多数 (1000 など) 作成してもパフォーマンスに劇的な影響はありませんか? つまり、Haskell スレッドを作成することで発生するオーバーヘッド
forkIO
は (ほとんど) 無視できると言えますか? 可能であれば、実用的な例を持ってきてください。軽量スレッドの概念が、マルチコア アーキテクチャの利点を利用する妨げになっていませんか? 私が理解しているように、2 つの Haskell スレッドを 2 つの別個のコアで同時に実行することはできません。これは、オペレーティング システムの観点からは、実際には 1 つのスレッドであるためです。それとも、Haskell ランタイムは、複数の CPU を確実に利用できるようにするための巧妙なトリックを行っているのでしょうか?
linux-kernel - マルチチップ マルチコア SMP システムで、Linux カーネルによって軽量スレッドはどのようにスケジュールされますか?
軽量スレッドを使用して並列アルゴリズムを実行していますが、システムが複数のコアと複数のチップを提供している場合、これらがどのように異なるコアに割り当てられているのか疑問に思っています。チップ上のすべてのコアが使い果たされるまで、スレッドは単一のチップに割り当てられますか? チップ間で作業をより適切に分散するために、スレッドは異なるチップのコアに割り当てられていますか?
multithreading - 軽量プロセスとスレッドの違いは何ですか?
ここで質問に対する答えを見つけました。しかし、私は答えのいくつかのアイデアを理解していません。たとえば、軽量プロセスは、その論理アドレス空間を他のプロセスと共有すると言われています。どういう意味ですか?2つのスレッドで同じ状況を理解できます。どちらも1つのアドレス空間を共有しているため、両方ともbssセグメントから任意の変数を読み取ることができます(たとえば)。しかし、bssセクションが異なる多くの異なるプロセスがあり、それらすべてを共有する方法がわかりません。
pthreads - Ubuntu12.04 で NPTL の 2 つのスレッドの pid が異なる理由
NPTLを使用していると思われるUbuntu 12.04 LTSサーバーx64(3.2カーネル)でいくつかのコードをテストしました。
私が走るとき
私は得る
以下はテストコードです。gcc -g -Wall -pthread でコンパイルしました
プログラムを実行すると、すべて予想どおりのようです。2 つのスレッドの pid が同じです。
しかし、htop (top のようなツールで、apt-get で取得できます) では、次のように表示されます: 2 つのスレッドの pid が異なります
pid 2108を強制終了すると、プロセスが強制終了されます
そして、gdb を介してプログラムを実行すると、LWPが表示されます。
NPTL のスレッドは 1 つの PID を共有し、LWP はカーネル 2.6 より前の LinuxThreads 用だと思います。上記は、NPTL がまだ LWP を使用しているようです。私は正しいですか?NTPLとLWPの真相が知りたいです。
ありがとう。
multithreading - 多対 1 のスレッド モデルでは、マッピングが実際に開始されるのはいつですか?
多対 1 モデルに関する私の理解では、すべてのユーザー スレッドは LWP にバインドされ、LWP はカーネル スレッドにバインドされます。スレッド ライブラリはスレッドを LWP にスケジューリングする役割を担い、カーネルは単一のスレッド化されたアプリケーションしか認識しません。
それで、マッピングはプログラムが開始された瞬間(メインスレッドが実行されたとき)に発生しますか、それともプログラムの実行の間のどこかで発生しますか?
java - スレッドが軽量プロセスと呼ばれるのはなぜですか?
ほとんどの Java チュートリアルでは、軽量プロセスとしてスレッドについて言及しています。スレッドの作成で何が起こっているかは知っていますが、スレッドの定義がわかりませんでした。stackoverflow では、ほとんどの場合、この質問にも回答しています。しかし、それも私は混乱しています。「軽量プロセス」の背後にある本当のアイデアを得ることができませんでした。「スレッドは軽量プロセス」の意味を最も簡単に説明できる人はいますか?