Skip to content

Instantly share code, notes, and snippets.

@quamen
Created November 17, 2010 08:49
Show Gist options
  • Save quamen/703160 to your computer and use it in GitHub Desktop.
Save quamen/703160 to your computer and use it in GitHub Desktop.
-module (e25).
-compile (export_all).
ringBenchmark(NumberOfNodes, Message, NumberOfLaps) ->
statistics(runtime),
statistics(wall_clock),
FirstNode = spawn(?MODULE, loop, [[]]),
LastNode = createNode(1, NumberOfNodes, FirstNode),
FirstNode ! LastNode,
sendMessage(Message, FirstNode, NumberOfNodes * NumberOfLaps),
{_, Time1} = statistics(runtime),
{_, Time2} = statistics(wall_clock),
io:format("Sent ~p messages in time=~p (~p) milliseconds~n", [NumberOfLaps * NumberOfNodes, Time1, Time2]).
loop(NextNode) ->
io:format("Spawned with NextNode ~p~n", [NextNode]),
receive
{_From, Message, NumberOfHops} ->
io:format("Message '~p' with NumberOfHops ~p~n", [Message, NumberOfHops]),
sendMessage(Message, NextNode, NumberOfHops - 1),
loop(NextNode);
NewNext when NextNode =:= [] ->
loop(NewNext)
end.
createNode(NumberOfNodes, NumberOfNodes, NextNode) -> NextNode;
createNode(NodeNumber, NumberOfNodes, NextNode) ->
createNode(NodeNumber + 1, NumberOfNodes, spawn(?MODULE, loop, [NextNode])).
sendMessage(_Message, _ToNode, 0) -> void;
sendMessage(Message, ToNode, NumberOfHops) ->
ToNode ! {self(), Message, NumberOfHops}.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment