Concurrency erlang中并发循环时间的测量
我在erlang中创建了一轮进程,并希望测量第一条消息通过网络和整个消息系列所花费的时间,每次第一个节点返回消息时,它都会发送另一条消息。 现在在第一个节点中,我有以下代码:Concurrency erlang中并发循环时间的测量,concurrency,erlang,Concurrency,Erlang,我在erlang中创建了一轮进程,并希望测量第一条消息通过网络和整个消息系列所花费的时间,每次第一个节点返回消息时,它都会发送另一条消息。 现在在第一个节点中,我有以下代码: receive stop-> io:format("all processes stopped!~n"), true; start-> statistics(runtime), Son!{number, 1}, msg(PID, Son, M, 1); {_, M
receive
stop->
io:format("all processes stopped!~n"),
true;
start->
statistics(runtime),
Son!{number, 1},
msg(PID, Son, M, 1);
{_, M} ->
{Time1, _} = statistics(runtime),
io:format("The last message has arrived after ~p! ~n",[Time1*1000]),
Son!stop;
当然,我会在发送第一条消息时开始统计。
正如您所看到的,我在第一个消息循环中使用了自上次调用以来的时间,并希望在整个运行中使用总运行时间,问题是,自从我第一次开始统计以来,总运行时间是累积的。
我想到的第二个想法是使用另一个进程,它有两个接收循环,获取每个循环的时间,添加它们并打印,但我相信erlang可以做得更好。
我想解决这个问题的最佳方法是以某种方式刷新总运行时间,但我找不到如何做到这一点。有没有办法解决这个问题 测量往返时间的一种方法是随每条消息发送一个时间戳。当第一个节点收到消息时,它可以测量往返时间,计算
Total\u Run\u time-Timestamp
为了计算总运行时间,我将记住进程状态(或字典)中的第一个时间戳,并在停止测试时计算总运行时间
此外,考虑到您提到的网络,您是否确定CPU时间(即统计(运行时)计算的时间)是您所追求的?也许,挂钟时间更合适