Erlang 编程/进程
外观
在 Erlang 中,创建和控制进程非常容易。
程序 chain_hello.erl 构建了一个任意长度的进程链。每个进程创建一个进程,然后向其发送消息。该程序创建一个包含 N 个进程的链,每个进程输出 "hello world!<N>"(其中 <N> 是某个整数)。
进程彼此发送和接收消息。消息使用模式匹配读取。消息以 FIFO(先进先出)的方式匹配。
注意 1:最终输出的顺序取决于进程调度。
注意 2:时间向下流动(在每条垂直线上,参见注意 1)。
这是执行 chain_hello:start(1) 的进程消息图。
start(1)
|
spawns -----------> listen(1)
| |
| spawns --------------------> listen(0)
| | |
| sends ----> speak ----------> prints --> "hello world 0"
| | |
sends --> speak --> prints --> "hello world 1" |
| |
ok ok
程序清单:chain_hello.erl
-module(chain_hello).
-compile(export_all).
%
start(N)-> % startup
Pid1 = spawn(chain_hello, listen, [N]),
Pid1 ! speak,
io:format("done \n").
%
listen(0)-> % base case
receive
speak ->
io:format("hello world!~w\n", [0])
end;
listen(N)-> % recursive case
Pid2 = spawn(chain_hello, listen, [N-1]),
Pid2 ! speak,
receive
speak ->
io:format("hello world!~w\n", [N])
end.
% ---- sample output ---- % % % 14> chain_hello:start(4). % done % hello world!4 % hello world!3 % hello world!2 % okhello world!1 % hello world!0