編寫一個環形基準測試。在一個環中建立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