编写一个环形基准测试。在一个环中创建N个进程。然后沿着环发送一条消息M次,最后总共发送N*M条消息,在N和M的不同取值下测试整个过程会消耗多长时间。
不知道我对这个题目的理解是否是正确的,创建一个进程,然后再这个进程中再创建一个,总共创建N个,形成一个环,只需要向Head进程发送一条消息,消息就可以沿着进程环传递直到最后一个进程。
下面是代码:
-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循环的代码:
for(Max, Max, F) -> [F(Max)];
for(I, Max, F) -> [F(I)|for(I+1, Max, F)].
仅供参考,希望能看到更好的答案。
erlang 程序设计 习题:环形基准测试,布布扣,bubuko.com
原文:http://www.cnblogs.com/DreamCreator/p/3670451.html