Erlangでのコンカレントプログラムの概要
3462 ワード
Erlangにおける基本的な同時関数
1)Pid=spwan(Mod,Func,Args)は、apply(Mod,Func,Args)を実行するための新しいプロセスを作成し、呼び出しプロセスと並列に実行し、最新のコード定義モジュールを使用します.2) Pid!MessageはPidプロセスにMessageを非同期で送信します.送信オペレータ3)Receive...endにメッセージを受信
内蔵関数erlang:system_info(process_limit)は、許可する最大プロセス数を見つけることができ、デフォルトは262144である.
プロセス登録の組み込み関数は次のとおりです.
register(AnAtom,Pid)Pidを名前で登録
uregister(AnAtom)関連登録の抹消
Whereis(AnAtom)->Pid|undefined Pidが登録されているかどうかを確認
registered()->「AnAtom::atom()」は、システム内のすべての登録プロセスのリストを返します.
コンカレント・プログラム・テンプレート:
メッセージが受信されるたびに処理され、loop()が再び呼び出されます.このプロセスは、スタックスペースを消費することなく、常にループすることができます.
Erlangコンカレントプログラムのエラー処理は、リモートモニタリングとエラー処理に基づいて構築され、予防ではなく救済に重点を置いており、防御コードはほとんどなく、エラー後にシステムのコードをクリーンアップするだけで、他のプロセスにエラーを修復し、クラッシュを任せることに重点を置いています.
プログラムがエラー時にすぐにクラッシュする利点:1)防御コードを記述せずに直接クラッシュするのが簡単
2)他人が修復する
3)誤りを悪化させない
4)第一時間に旗を掲げて合図する
5)修復時に原因を心配せずに整理する
6)システムアーキテクチャのシンプル化
監視と接続は似ていますが、監視は一方向です.監視されているプロセスが停止すると、終了信号ではなく、監視プロセスに「ダウンタイム」メッセージが送信されます.基本的なエラー処理関数は次のとおりです.
分散モデル:分散erlangとsocketベースの分散モデル.分散erlangは、通常、同じローカルエリアネットワークのクラスタ上で動作し、ファイアウォールによって保護されます.SOcketに基づく分布モデルはTCP/IP信頼できないネットワークに基づく.
分散Erlangの主な問題は、クライアントがサーバ上で複数のプロセスを分割することを自分で決定できることであり、すべてのマシンを所有し、単一のマシンで制御したいということです.lib_chanモジュールは、ユーザが自分のマシンがどのプロセスを分裂させるかを明示的に制御することができる.
インターネット上でコンカレント・プログラムを実行するには、次の手順に従います.
1)4369ポートがTCPとUDPの両方に対して開発されていることを確認し、このポートはepmd(Erlangポートマッピングデーモン)2)に対して1つまたは1つの連続したポートを選択して分散erlangに使用し、これらのポートが開放されていることを確保する.例えば:
Rpcは多くのリモートコールサービスを提供しており、globalの関数は分散システムに名前を登録し、全接続のネットワークを維持するために使用することができます.
Erlangクラスタは、同じクッキーを持つ相互接続ノードのセットです.クッキーを作成する3つの方法:1)ファイル$HOME/.erlang.Cookieは同一のCookie 2を格納する)Erlang起動時には、例えば、Csetcookie
3)内蔵関数erlang:set_Cookie(node(),C)プログラムで指定
Erlangはポートという名前のオブジェクトを介して外部プログラムと通信し,ポートにメッセージを送信しようとすると,このメッセージはポートに接続された外部プログラムに送られ,外部プログラムからのメッセージはポートからのErlangメッセージになる.ポートを作成するプロセスはポートへの接続プロセスとなり、ポートへのメッセージはすべて接続プロセスのPIDを明記する必要があり、外部プログラムからのメッセージはすべて接続プロセスに送信されます.
1)Pid=spwan(Mod,Func,Args)は、apply(Mod,Func,Args)を実行するための新しいプロセスを作成し、呼び出しプロセスと並列に実行し、最新のコード定義モジュールを使用します.2) Pid!MessageはPidプロセスにMessageを非同期で送信します.送信オペレータ3)Receive...endにメッセージを受信
receive
Pattern1[when Guard1]-> Expression1;
Pattern2[whenGuard2]->Expression2;
…
aftertime->
Expressions
end.
内蔵関数erlang:system_info(process_limit)は、許可する最大プロセス数を見つけることができ、デフォルトは262144である.
プロセス登録の組み込み関数は次のとおりです.
register(AnAtom,Pid)Pidを名前で登録
uregister(AnAtom)関連登録の抹消
Whereis(AnAtom)->Pid|undefined Pidが登録されているかどうかを確認
registered()->「AnAtom::atom()」は、システム内のすべての登録プロセスのリストを返します.
コンカレント・プログラム・テンプレート:
-module(ctemplate).
-compile(export_all).
start() ->
Spwan(?MODULE,loop,[]).
rpc(Pid,Request) ->
Pid! {self(),Request},
receive
{Pid,Respone}->
Response
end.
loop(X) ->
receive
Any->
Io:format(“Received:~p ~n”, [Any]),
loop(X)
end.
メッセージが受信されるたびに処理され、loop()が再び呼び出されます.このプロセスは、スタックスペースを消費することなく、常にループすることができます.
Erlangコンカレントプログラムのエラー処理は、リモートモニタリングとエラー処理に基づいて構築され、予防ではなく救済に重点を置いており、防御コードはほとんどなく、エラー後にシステムのコードをクリーンアップするだけで、他のプロセスにエラーを修復し、クラッシュを任せることに重点を置いています.
プログラムがエラー時にすぐにクラッシュする利点:1)防御コードを記述せずに直接クラッシュするのが簡単
2)他人が修復する
3)誤りを悪化させない
4)第一時間に旗を掲げて合図する
5)修復時に原因を心配せずに整理する
6)システムアーキテクチャのシンプル化
監視と接続は似ていますが、監視は一方向です.監視されているプロセスが停止すると、終了信号ではなく、監視プロセスに「ダウンタイム」メッセージが送信されます.基本的なエラー処理関数は次のとおりです.
-spec spwan_link(Fun) ->Pid
-spec spwan_monitor(Fun)-> {Pid,Ref}
-spec process_flag(trap_exit,true)
-spec link(Pid) ->true
-spec unlink(Pid) -> true
-spec erlang:monitor(process,Item) ->Ref
-spec exit(Why) -> none()
分散モデル:分散erlangとsocketベースの分散モデル.分散erlangは、通常、同じローカルエリアネットワークのクラスタ上で動作し、ファイアウォールによって保護されます.SOcketに基づく分布モデルはTCP/IP信頼できないネットワークに基づく.
分散Erlangの主な問題は、クライアントがサーバ上で複数のプロセスを分割することを自分で決定できることであり、すべてのマシンを所有し、単一のマシンで制御したいということです.lib_chanモジュールは、ユーザが自分のマシンがどのプロセスを分裂させるかを明示的に制御することができる.
インターネット上でコンカレント・プログラムを実行するには、次の手順に従います.
1)4369ポートがTCPとUDPの両方に対して開発されていることを確認し、このポートはepmd(Erlangポートマッピングデーモン)2)に対して1つまたは1つの連続したポートを選択して分散erlangに使用し、これらのポートが開放されていることを確保する.例えば:
$erl -name …-setcookie … -kernelinet_dist_listen_min Min \
Inet_dist_listen_maxMax
Rpcは多くのリモートコールサービスを提供しており、globalの関数は分散システムに名前を登録し、全接続のネットワークを維持するために使用することができます.
Erlangクラスタは、同じクッキーを持つ相互接続ノードのセットです.クッキーを作成する3つの方法:1)ファイル$HOME/.erlang.Cookieは同一のCookie 2を格納する)Erlang起動時には、例えば、Csetcookie
$erl -setcookieABCDEFG2048
3)内蔵関数erlang:set_Cookie(node(),C)プログラムで指定
Erlangはポートという名前のオブジェクトを介して外部プログラムと通信し,ポートにメッセージを送信しようとすると,このメッセージはポートに接続された外部プログラムに送られ,外部プログラムからのメッセージはポートからのErlangメッセージになる.ポートを作成するプロセスはポートへの接続プロセスとなり、ポートへのメッセージはすべて接続プロセスのPIDを明記する必要があり、外部プログラムからのメッセージはすべて接続プロセスに送信されます.