Erlang

资料:

并发

在 Erlang 进程间的消息是一个有效的 Erlang 字串,即,它们可以是列表、元组、整数、 元子、pid 等等。

每个进程对于它收到的消息,有一个自己的输入队列。新的消息会放在队列的尾部。当一个 进程执行了一个 receive, 队列中第一个与匹配条件一致的消息就会从队列中移除,并匹 配的动作会执行。

如果第一个匹配试没有被匹配的话,第二个就会被检验,如果与队列中移除的条件匹配了的 话, 相对于第二个式子中的运作会被执行。第三个也依次类推。 如果没有匹配的话,那么第 一个消 息就会被放回队列中,并用第二个消息来做对应的操作。如果第二个消息匹配的话, 相应的动作 就会被执行,并把第二个消息从队列中移除(并保留第一个消息和其它的消息在队列中)。如果第 二个消息也不匹配,我们会试着用第三个消息,直到达到队列尾。如果到达到队列尾部,进程就会 阻塞(中止执行)并等待,直到一个新的消息被收到,上面的过程重复。

example pingpong.erl

-module(pingpong).

-compile([export_all]).


ping(0, Pong_PID) ->
    Pong_PID ! finished,
    io:format("ping finished~n", []);

ping(N, Pong_PID) ->
    Pong_PID ! {ping, self()},
    receive
        pong ->
            io:format("ping reveive pong~n", [])
    end,
    ping(N-1, Pong_PID).


pong() ->
    receive
        finished ->
            io:format("pong finished~n", []);
        {ping, Ping_PID} ->
            io:format("pong reveive ping~n", []),
            Ping_PID ! pong,
            pong()

    end.


start() ->
    Pong_PID = spawn(pingpong, pong, []),
    spawn(pingpong, ping, [3, Pong_PID]).

进程名称注册

Erlang 在此提供一个机制,以此 可以给进程一个名字,而不是 pid。这是由 register 这个内建函数完成的:

register(some_atom, Pid)
Read the Docs v: latest
Versions
latest
Downloads
PDF
HTML
Epub
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.