Erlang併發程式設計之訊息傳遞

2021-08-03 02:38:19 字數 1739 閱讀 8258

下面是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 ...