亚洲成人一区在线观看_天堂网www_国产精品久久9_中文在线播放_伊人天天_久久精品久久久精品美女

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 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社区在线播放 | 欧美九九 | 精品久久电影 | 天天干天天操天天干 | 国产综合视频在线观看 | 国产精品手机在线 | 99pao成人国产永久免费视频 | 日韩伦理一区二区 | 亚洲国产精品久久 | 久久国产精品久久久久久久久久 | 成人一区二区三区在线观看 | 91精品国产综合久久久久久丝袜 | 成人一区二区av | 高清成人| 色九九| 日本成人三级 | 色综合久久88色综合天天 | 99热影院 | 日韩视频在线观看 | 中文字幕在线观看 | 久久久久中文 | 国产精品久久久久久久久久东京 | 嫩草网站在线观看 | 久久精品久久久 | 久久九九精品久久 | 午夜影院网站 | 国产精品久久久久影院色老大 | 午夜精品久久久久久 | 久久精品一区二区国产 | 亚洲精品一区二区三区在线观看 | 精品久久久成人 | 精品无码久久久久国产 | 91精品视频在线播放 | 色视频网站在线观看 | 韩国三级中文字幕hd久久精品 | 成人情趣视频 | 亚洲 欧美 精品 | 亚洲a网 | 国产福利精品一区 | 国产精品成人3p一区二区三区 |