本文共 1396 字,大约阅读时间需要 4 分钟。
(1)编写一个函数start(AnAtom,Fun)来把spawn(Fun)的结果注册为AnAtom。当两个并行的进行同时执行到start/2函数时,要确保代码能够正常工作。也就是说,这两个进程其中一个成功执行,而另一个必须执行失败。
-module(ex1).-compile(export_all). main(_) -> start(abc, fun() -> io:format("Bing~n") end), start(abc, fun() -> io:format("Bang~n") end). start(AnAtom, Fun) -> R = self(), spawn( fun() -> try register(AnAtom, self()) of true-> R ! true, Fun() catch error:_ -> R ! false end end ), receive true -> true; false -> io:format("false ~n") end.
(2)编写一个环形基准测试。在一个环形创建N个进程。然后沿着环发送一条消息M次,最后总共发送N*M条消息。在N和M的不同取值下测试整个过程会消耗多长时间。
-module(ex2).-compile(export_all). main() -> start(1000, 10), start(1000, 20), start(2000, 10). start(N, M) -> statistics(runtime), statistics(wall_clock), L = create(N, []), post(haha, L, M), {_, Time1} = statistics(runtime), {_, Time2} = statistics(wall_clock), io:format("Total time : ~p(~p) ~n", [Time1*1000, Time2*1000]). create(0, L) -> L; create(N, L) -> Pid = spawn(fun loop/0), create(N-1, [Pid|L]). loop() -> receive Any -> io:format("Msg arrived: ~p~n", [Any]), loop() end. post(_ , _, 0) -> void; post(Msg, L, M) -> %io:format("M = ~p~n", [M]), [ H ! Msg || H <-L], post(Msg, L, M-1).
参考资料:
《》
转载地址:http://jpqli.baihongyu.com/