下面是erlang教程的乙份**,其中建立了兩個程序,其中乙個重複向另乙個傳送訊息。
module(tut15).
-export([start/0, ping/2, pong/0]).
ping(0, pong_pid) ->
pong_pid ! finished,
io:format("ping finished~n", );
ping(n, pong_pid) ->
pong_pid ! ,
receive
pong ->
io:format("ping received pong~n", )
end,
ping(n - 1, pong_pid).
pong() ->
receive
finished ->
io:format("pong finished~n", );
->
io:format("pong received ping~n", ),
ping_pid ! pong,
pong()
end.
start() ->
pong_pid = spawn(tut15, pong, ),
spawn(tut15, ping, [3, pong_pid]).
下面是解析:
-module(tut4). %模組名字為tut4
-export([start/0,ping/2,pong/0]). %匯出函式 start函式引數0個 ping函式引數2個 pong函式引數0個
ping(0,pong_pid)-> %如果ping的第乙個引數是0,
pong_pid ! finished, %向pid為pong_pid的程序傳送finised訊息
io:format("ping finished~n",);%格式化輸出一條資訊
ping(n,pong_pid)-> %如果ping的第乙個引數不是0
pong_pid ! , %向pid為pong_pid的程序傳送訊息,訊息格式為,self()返回當前程序的pid
receive %接受訊息
pong-> %接受的訊息如果是pong
io:format("ping recevived pong~n",) %格式化輸出一條訊息,注意,end之前沒有標點符號
end,
ping(n-1,pong_pid). %n-1然後繼續呼叫ping
pong()->
receive %接受訊息
finished-> %如果接收的訊息是finised
io:format("pong finished~n",); %格式化輸出一條訊息
-> %如果接收的訊息是這種格式的訊息
io:format("pong received ping~n",), %格式化輸出一條訊息
ping_pid ! pong, %向pid為ping_pid的程序傳送乙個pong訊息
pong() %繼續呼叫pong。注意,end前面沒有標點符號 也就是說,只有當pong接收到乙個訊息時,才向ping傳送訊息並繼續呼叫自己
end.
start()->
pong_pid = spawn(tut4,pong,), %建立乙個程序,並返回pid
spawn(tut4,ping,[3,pong_pid]). %建立另乙個程序
erlang 併發程式設計 併發01
erlang純訊息傳遞式語言 特點 建立新程序 通過pid給次執行緒發訊息,mod模組,func方法,args傳入引數 pid spawn mod,func,args 新起乙個併發程序執行fun,fun的屬性是當前值 pid spawn fun 傳送訊息 pid message接受訊息 receiv...
16 5 訊息併發傳遞
16.5 訊息併發傳遞 當我們在第 14 章中討論開發併發程式時,關注的技術是避免使用可變狀態。沒有可變狀態,就可以並行地執行乙個計算的幾個部分,因為它們不會彼此干擾。這在許多能夠以函式方式實現的資料處理問題時,工作地非常好,但在處理需要更頻繁地交換資訊時,也有問題。最廣為人知的解決方案是,使用共享...
Erlang併發程式設計 五 bigwig
bigwig erlang web 監控工具。參考資料 git clone 修改rebar.config,指定版本 預設是r14,如果當前系統使用r15需要則修改 獲取依賴。rebar get deps start ensure started crypto ensure started sasl ...