且听疯吟如此生活三十年
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
  • 编写并发程序的一般模式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    -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.
    1
    2
    3
    4
    5
    6
    %% run in erlang shell
    Pid = concurrency:start().
    %% <0.33.0>
    concurrency:rpc(Pid, "test!")
    %% Received: "test"
    %% {<0.56.0>,"Received!"}