国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 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精品国产乱码久久 | 成人午夜精品一区二区三区 | 国产新婚夫妇白天做个爱 | 欧美第一页在线 | 人人搞人人插 | 新四虎| 欧美日韩免费 | 国产网红福利视频一区二区 | 九九热99视频 | 日韩精品91 | 欧产日产国产精品99 | 国产一区二区三区四区 | av首页在线| 亚洲国产一区二区在线观看 | 巨大黑人一级毛片 | 狠狠做六月爱婷婷综合aⅴ 狠日日 | 淫片免费 | 日韩精品一区二区在线 | 亚洲精品a在线观看 | 成年人在线免费看的惊悚动作片 | 草久免费视频 | 欧美无砖砖区免费 | 一区二区国产精品视频 | 欧美成人免费在线 | 三级福利片 | 婷婷干 | 97婷婷狠狠成为人免费视频 | 天天做天天爱天天综合色 | 91精品国产乱码 | freexxxxx性开放hd| 亚州欧美 | 欧美国产日韩综合 | 亚洲视频入口 | 亚洲一区精品人人爽人人躁 | 日韩精品123区 | 先锋影音在线观看 | 中文字幕第一页亚洲 | 图片区小说区综合区第一页 | 久久久视频6r |