誰かErlangのPid (Process Identifier)の構造を説明してください。
質問
誰かErlangのPidの構造を説明してください。
Pidは以下のような感じです。
<A.B.C>
のようになります。
<0.30.0>
という3つのビットがありますが、この3つのビットの意味を教えてください。
A
,
B
と
C
.
A
は、常に
0
であるように見えますが、Pid のオーナーが他のノードにいる場合、この値は変化します。
Pidだけを使って、リモートノードに直接メッセージを送ることは可能でしょうか?そのようなものです。
<4568.30.0> ! Message
のように、登録されたプロセスの名前とノード名を明示的に指定することなく (
{proc_name, Node} ! Message
)?
どのように解決するのですか?
印刷されたプロセスID < A.B.C > は、次のように構成されています。 6 :
- A, ノード番号(0はローカルノード、0はリモートノード) ノード、リモートノードの場合は任意の番号)
- B, プロセス番号の最初の 15 ビット (プロセス テーブルへのインデックス) 7
- C、プロセス番号のビット16~18(Bと同じプロセス番号の場合) 7
内部的にはプロセス番号は32ビットエミュレータでは28ビット幅です。BとCの奇妙な定義はR9Bとそれ以前のバージョンのErlangからきており、Bは15ビットのプロセスIDで、Cは最大プロセスIDに達したときに増分されるラップカウンターで、より低いIDは再利用されます。
ErlangディストリビューションではPIDは他の情報と同様にノードアトムを含むので、もう少し大きくなっています。( ディストリビューションPIDのフォーマット )
内部PIDがあるノードから他のノードに送信されるとき、それは自動的に外部/分散PID形式に変換されるので、次のようなものがあります。
<0.10.0>
(
inet_db
) は、あるノードでは
<2265.10.0>
となってしまいます。これらの PID には通常通り送信することができます。
% get the PID of the user server on OtherNode
RemoteUser = rpc:call(OtherNode, erlang,whereis,[user]),
true = is_pid(RemoteUser),
% send message to remote PID
RemoteUser ! ignore_this,
% print "Hello from <nodename>\n" on the remote node's console.
io:format(RemoteUser, "Hello from ~p~n", [node()]).
詳細はこちらをご覧ください。 内部PID構造 , ノード生成情報 , EPMDとのノード生成カウンターの相互作用
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン