Erlang Programming 笔记 3
6. 编译并运行程序
- (略)
7. 并发
- 机制
- Erlang 程序由成百上千个 Process 组成,这些 Process 之间可以互发消息
- Process 能否接收到或者理解消息是不确定的,要知道结果必须向该 Process 发送消息询问并等待
- Process 之间可以互相 Link ,当 Process 消亡时与之相连的 Process 会收到消息
8. 并发编程
并发原语
Pid = spawn(Module, FuncName, Args)
创建一个新的 Process,用于对 Func 求值,并返回该 Process 的 pidPid ! Message
- 向指定 Pid 的 Process 发送消息,返回值为 Message 本身
- 消息发送是异步的,无需等待即可进行其他操作
receive ... end
- 接收一个发给当前进程的消息
self()
获取自己的 pid
注册进程
register(AnAtom, Pid)
unregiseter(AnAtom)
进程死亡时会自动 unregiseter
编写并发程序的一般模式
-module (concurrency). -compile(export_all). start() -> spawn(?MODULE, loop, []). rpc(Pid, Request) -> Pid ! {self(), Request}, receive {Pid, Response} -> {Pid, Response} end. loop(X) -> receive {From, Any} -> From ! {self(), "Received!"}, io:format("Received: ~p~n", [Any]), loop(X) end.
%% run in erlang shell Pid = concurrency:start(). %% <0.33.0> concurrency:rpc(Pid, "test!") %% Received: "test" %% {<0.56.0>,"Received!"}