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