erlang 程序設計 習題:環形基準測試

編寫一個環形基準測試。在一個環中建立N個進程。而後沿着環發送一條消息M次,最後總共發送N*M條消息,在N和M的不一樣取值下測試整個過程會消耗多長時間。oop

不知道我對這個題目的理解是不是正確的,建立一個進程,而後再這個進程中再建立一個,總共建立N個,造成一個環,只須要向Head進程發送一條消息,消息就能夠沿着進程環傳遞直到最後一個進程。測試

下面是代碼:spa

-module(circle_process).
-import(lib_misc,[for/3]).
-compile(export_all).

start(Num) ->
    register(circle_head, spawn(fun() -> create(Num)end)).


send_message(M, N) ->
    lib_misc:for(0, N, fun(I) -> circle_head ! M end).

create(0) ->
    self();
create(Num) ->
    Pid = spawn(fun() -> create(Num - 1) end),
    io:format("self Pid:~p create process:~p~n", [self(), Pid]),
    loop(Pid).

loop(Pid) ->
    receive
        cancel ->
            Pid ! cancel,
            cancel;
        Any ->
            Pid ! Any,
            io:format("Pid:~p receive:~p~n", [self(), Any]),
            loop(Pid)
    end.

lib_misc中for循環的代碼:code

for(Max, Max, F) -> [F(Max)];
for(I, Max, F) -> [F(I)|for(I+1, Max, F)].

 

僅供參考,但願能看到更好的答案。orm

相關文章
相關標籤/搜索