1.两进程的消息传递
以下面程序为例:
-module(tut16). -export([start/0, ping/1, pong/0]).
ping(0) -> pong ! finished, %% finished 被发送给了”pong”(导致它像下面所说的那个被终止)
io:format("ping finished~n", []);
ping(N) -> pong ! {ping, self()}, %%表示 self()返回当前自在运行的进程 ID,在这里是”ping”的进程 ID。 receive
pong -> io:format("Ping received pong~n", [])
end, ping(N - 1).
pong() -> receive
finished -> io:format("Pong finished~n", []);{ping, Ping_PID} -> io:format("Pong received ping~n", []), Ping_PID ! pong, pong()end.
start() -> register(pong, spawn(tut16, pong, [])), %% 进程名称注册 spawn(tut16, ping, [3]).2> c(tut16). {ok, tut16} 3> tut16:start(). <0.38.0> Pong received ping Ping received pong Pong received ping Ping received pong Pong received ping Ping received pong ping finished Pong finished
总结:
1.Erlang内建函数spawn被用于建立一个新的进程:spawn(模块, 导出的函数, 参数列表)
2.发送消息方法:Pid ! Message , 即,Message(任何东西)被发到给了标识为 Pid 的进程。
3.receive 构造用于允许进程等待来自其它进程的消息。它的格式是:
receive
pattern1 ->
actions1; pattern2 ->
actions2; ....
patternN actionsN
end.
注意,在结尾没有”;”。