且听疯吟 如此生活三十年
Erlang Programming 笔记 3

6. 编译并运行程序

  • (略)

7. 并发

  • 机制
    • Erlang 程序由成百上千个 Process 组成,这些 Process 之间可以互发消息
    • Process 能否接收到或者理解消息是不确定的,要知道结果必须向该 Process 发送消息询问并等待
    • Process 之间可以互相 Link ,当 Process 消亡时与之相连的 Process 会收到消息

8. 并发编程

  • 并发原语

    • Pid = spawn(Module, FuncName, Args)
      创建一个新的 Process,用于对 Func 求值,并返回该 Process 的 pid
    • Pid ! 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!"}