質問

Erlang の勉強を始めましたが、BEAM ランタイム環境が魅力的であると感じています。Erlang では、プロセスは OS (ランタイム、この場合は BEAM を意味します) ではなく言語に属するとよく言われています。これらは、Erlang が有名になりつつある軽量の「グリーン プロセス」です。さらにこう書かれています(5ページ) この紙) BEAM は、CPU コアごとに 1 つの OS スレッドをスケジューリングに使用し、別の OS スレッドを I/O に使用します。それで私は疑問に思う:Erlang コードを実際に実行するために必要な CPU サイクルはどのスレッドから供給されますか?

さらに、デュアル コア マシンで実行している場合、これまでに読んだ内容に基づいて、BEAM プロセスで 3 つのスレッドが実行されていることが予想されます。2 つのスケジューラ (各コアに 1 つ) と 1 つの I/O スレッド。しかし、私には10が見えます。時々11.高品質のアンプのように、13 から始まり 11 まで進む場合もあります。

私は混乱しています。あらゆる洞察をいただければ幸いです。

役に立ちましたか?

解決

@user425720のアドバイスに従って、erlang-questions listservについて質問しました。 aとしても利用できます Google Group. 。 TriforkのKresten Krab Thorupは、私にほぼ一度に答えました。クレストンに出かけてくれてありがとう。これが彼の答えです。 (括弧と強調は私のものです。)

基本的なシナリオであるAFAIKは次のとおりです。

Erlangコードは、プロセスがあるのと同じくらい多くの「グリーンスレッド」で実行されます。プロセス制限は、 +P(コマンドライン)フラグによって制御されます。

緑のスレッドはSスレッドにマッピングされます。ここで、Sはコア/CPUの数です。事実 これらのスレッドはスケジューラとも呼ばれますやや混乱しているように見えるかもしれませんが、VMSの観点からはそうです。 開発者の観点から、それらはあなたのerlangコードを実行するスレッドです. 。数値sは、ERLコマンドラインの +Sオプションで制御できます。

さらに、HERETOには、いわゆる「非同期スレッド」がたくさんあります。これは、ドライバーでリンクされたI / Oプロセスで使用されるスレッドプールであり、選択 /投票などに反応します。アシンチスレッドの数は動的ですが、 +Aフラグによって制限されます。

したがって、デュアルコアで表示される11のスレッドは、2つのスケジューラと9つの非同期スレッドである場合があります。例えば。

フラグの詳細を読んでください ここ.

他のヒント

Java のスレッドがグリーンであるため、Erlang プロセスは「グリーン」ではありません。Erlang プロセスはメモリを共有しない構造であり、Erlang VM によって維持されます。

奇妙に聞こえるかもしれないが、この論文は「古い」可能性がある(たとえ2007年の経歴であっても)。R13 リリースの頃には、ランタイム キューのまったく新しい処理 (動的バランシングやその他の便利な機能を使用) が追加されて、すべてが変わりました。これについてはウルフ・ウィガー氏によるプレゼンテーションです。 http://ulf.wiger.net/weblog/2009/01/23/erlang-programming-for-multicore/

要約すると、プロセスは完全に透過的であり、実行時キューとスケジューラの数を調整できますが、OS の実現は完全ではありません。なぜ 11 ものスレッドがあるのか​​については推測したくありません。

編集:OSについては少し間違っています:

+S Schedulers:SchedulerOnline

SMP サポートが有効になっている場合に、作成するスケジューラ スレッドの量とオンラインに設定するスケジューラ スレッドの量を設定します。

両方の値の有効範囲は 1 ~ 1024 です。Erlang ランタイム システムが構成された論理プロセッサの量と利用可能な論理プロセッサを判断できる場合、スケジューラはデフォルトで構成された論理プロセッサを使用します。 SchedulersOnline デフォルトでは、使用可能な論理プロセッサが使用されます。それ以外の場合、デフォルト値は 1 になります。次の場合、スケジューラは省略できます。 :SchedulerOnline はそうではなく、その逆も同様です。オンラインのスケジューラの数は、実行時に次のように変更できます。 erlang:system_flag(schedulers_online, SchedulersOnline).

...

エミュレータで SMP サポートが有効になっていない場合、このフラグは無視されます (「 -smp フラグ)。

ここから: http://www.erlang.org/doc/man/erl.html

編集2:erlang-question メーリング リストでの、多数の VM と多数のスケジューラの長所と短所に関する興味深い議論。残念ながら、これも 2008 年のものであり、新しい OTP リリースでは大幅な改善が加えられているため、有効ではない可能性があります。 http://www.erlang.org/cgi-bin/ezmlm-cgi?4:mss:38165:200809:nbihpkepgjcfnffkoobf

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top