Posted by stoyan
* Cast (send msg)
A ! B
* Event (get msg)
receive A -> A end
* Call (RPC)
A ! {self(), B},
receive
{A, Reply} ->
Reply
end
* Callback
receive
{From, A} ->
From ! F(A)
end
Some trickery follows ;).
Here something cool – Parallel
RPC:
par_rpc([A, B, C], M)
par_rpc(Ps, M) ->
Self = self(),
Tags = map(fun(I) ->
Tag = make_ref(),
spawn(fun() ->
Val = rpc(I, M),
Self ! {Tag, Val}
end),
Tag
end, Ps),
yield(Tags).
yield([]) -> [];
yield([H|T]) ->
Val1 = receive {H, Val} -> Val end,
[Val1|yield(T)].