综合二区_欧美成人综合_欧美成人二区_a黄视频_亚洲视频在线播放_一区二区三区视频免费看

当前位置:首页 > 网站旧栏目 > 学习园地 > 设计软件教程 > group_leader的设计和用途

group_leader的设计和用途
2010-01-13 23:18:17  作者:  来源:
一直对erlang的group_leader这个概念很困惑,因为*nix系统也有类似的名词但是只是和进程组管理有关系。查了很多文档才知道,erlang的group_leader的设计意图和作用,解释如下:

先看下着段代码运作:

log_group_leader(OGL) ->
    receive Msg ->
            io:format(user, "Got message ~p~n",[Msg]),
            OGL ! Msg,
            log_group_leader(OGL)
    end.

ioclient(NGL) ->
    group_leader(NGL, self()),
    io:format("Hello World~n"),
    io:format("Hello again~n").

iotest() ->
    OldGroupLeader = group_leader(),
    NewGroupLeader = spawn(?MODULE, log_group_leader, [OldGroupLeader]),
    spawn(?MODULE, ioclient, [NewGroupLeader]).

说白了group_leader就是决定erlang的io控制台的输出到那个进程。

这个特性很有帮助。我们在做服务器程序的时候 会有大量的诊断信息通过类似printf打印需要输出到控制台查看。 代码里东一块西一块都是诊断代码, 而且一旦程序调试完毕 我们可能不在需要这些信息污染环境。这个是单机的情况,对于分布式的情况就更复杂,很难把其他主机上打出的诊断信息汇总到一个地方集中查看。

group_leader就是解决这个问题的。 erlang里面的io:format之类的函数执行的时候最早输出会被重定向到该进程的group_leader进程去,而且进程是位置无关的,也就是说在其他主机上的信息都可以汇总。

有了这个特性 比如说我在其他的机器上执行条rpc命令 这个命令的结果是会被截获 传送回来的 而不是要到目标主机的终端上显示。

group_leader是继承的,每当spawn一个进程的时候,会自动继承父进程的这个属性。rpc的实现上也很大努力保证了这个语义不变。

在实践中也要注意这个特性的副作用,就是: 你用rpc执行的命令 就是想在目标机器上显示结果 但是看不到 因为被截获了。


安徽新华电脑学校专业职业规划师为你提供更多帮助【在线咨询
相关热词搜索:用途 设计
主站蜘蛛池模板: 亚洲国产激情 | 国产91色在线 | 免费 | 午夜天堂在线视频 | 免费成人午夜视频 | 精品天堂 | 在线男人天堂网 | 国产福利小视频在线 | 中文字幕一区二区三天 | 午夜成人影视 | 亚洲美女午夜一区二区亚洲精品 | 国产区二 | 天天爽片 | 亚洲精品久久久久国产 | 国产一级片精品 | 国产一级片精品 | 91亚洲在线 | 77777日本少妇久7黄绝片 | 九一电影网 | 久久成人在线观看 | 久久精品国产一区二区三 | 国产一区二区三区高清视频 | 99只有精品| 国产97色在线 | 国产 | 久久久二区 | 91久久精品国产91久久性色tv | 久久15 | 亚洲久久| 91亚洲免费 | 亚洲视频国产视频 | 成年免费视频 | www.久久 | 免费看一区二区三区 | 人人干日日 | 九色视频免费在线观看 | 91免费网站在线观看 | 免费观看视频91 | 久草福利站 | 在线视频亚洲精品 | 在线观看麻豆 | 91成人小视频 | 久久99精品久久久久 |