编写一个环形基准测试。在一个环中建立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