首页 > Erlang并发教程 > 10.11 Erlang并发编程-网络内核
2013
11-20

10.11 Erlang并发编程-网络内核

BACK TOP文章索引

  1. 网络内核
  2. 共3条评论

网络内核

net_kernel进程被用于协调分布式Erlang系统。运行时系统会自动向net_kernel发送某些消息。在该进程中执行的代码决定对于不同的系统消息应该采取何种动作。

Erlang系统可在两种模式下运行。它可以作为一个不与其他Erlang系统通讯的封闭系统运行,也可以同其他系统进行通讯,这时我们认为它存活着。通过调用BIF alive/2可以令系统活过来。通常这是由Erlang操作系统而不是用户完成的。以下调用:

erlang:alive(Name, Port)

将通知网络命名服务一个Erlang系统已经启动并可以参与分布式计算了。

Name是一个用于标识该Erlang系统的本地名称。该Erlang系统的外部名称为Name@MachineName,其中MachineName是节点所在的机器名,而字符“@”用于分隔本地名称与机器名。例如,在名为super.eua.ericsson.se的主机上调用erlang:alive(foo,Port)将会启动一个名为foo@super.eua.ericsson.se的Erlang系统,该名称全局唯一。在同一台机器上可以同时运行多个本地名不同的Erlang系统。

Port是一个Erlang端口。外部端口程序必须遵从Erlang分布式系统的内部协议。该程序负责所有的网络操作,如建立与远程节点间的通讯信道以及向这些节点的字节缓冲区读写数据。不同版本的端口程序允许Erlang节点采用不同的网络技术进行通讯。

执行alive/2将使执行该表达式的进程被加入一个可参与分布式计算的Erlang节点池。执行alive/2的进程必须以net_kernel为名进行注册。否则,该BIF调用会失败。要将一个节点从网路中断开,可以关闭分布式端口。

BIF is_alive()可用于检测一个节点是否存活。该BIF返回truefalse

一旦有新节点出现,net_kernel就会收到一条{nodeup, Node}消息;一旦有节点失败,net_kernel也相应会收到一条{nodedown, Node}消息。所有调用spawn/4spawn_link/4的进程创建请求以及所有采用{Name, Node} ! Message结构向远程注册进程发送消息的请求都会经过net_kernel进程。这使得用户可以通过自定义net_kernel代码来达成多种目的。例如,BIF spawn/4实际上是用Erlang自身实现的。在远程节点创建进程的客户端代码为:

spawn(N,M,F,A) when N /= node() ->
    monitor_node(N, true),
    {net_kernel, N} ! {self(), spawn, M, F, A, group_leader()},
    receive
        {nodedown, N} ->
            R = spawn(erlang, crasher, [N,M,F,A,noconnection]);
        {spawn_reply, Pid} ->
            R = Pid
    end,
    monitor_node(N, false),
    R;
spawn(N,M,F,A) ->
    spawn(M,F,A).

crasher(Node,Mod,Fun,Args,Reason) ->
    exit(Reason).

这段代码的效果是向远程节点上的net_kernel进程发送一条消息。远程的net_kernel负责创建新进程,并告知客户端新进程的Pid。


10.11 Erlang并发编程-网络内核》有 3 条评论

  1. 码率低。清晰度不高了。另外。注意声音。有的电影是7.1音效的。肯定大了。如果你要看正式的1080P。最少要下载40G以上的。蓝光原码。然后用好的音响听一下。爽啊。

  2. 码率低。清晰度不高了。另外。注意声音。有的电影是7.1音效的。肯定大了。如果你要看正式的1080P。最少要下载40G以上的。蓝光原码。然后用好的音响听一下。爽啊。

  3. 路人甲 说:

    果然是司机!

留下一个回复

你的email不会被公开。