国产一区二区精品久久_蜜桃狠狠狠狠狠狠狠狠狠_午夜视频精品_激情都市一区二区

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 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執行的命令 就是想在目標機器上顯示結果 但是看不到 因為被截獲了。


安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
相關熱詞搜索:用途 設計