WestKeys
Serialization of GenServer/:rpc requests to remote Nodes - clarification sought
Could someone clarify what is meant here by serialize your requests on a single server?
I’m assuming the receiving GenServer would also be running asynchronously on the remote node, so what is the difference with Tasks?
Taken from the docs
Both
:rpcand using a GenServer would serialize your requests on a single server, while tasks are effectively running asynchronously on the remote node, with the only serialization point being the spawning done by the supervisor.
Marked As Solved
al2o3cr
All the approaches run code on the remote machine, but which process they do it in is different:
- a named GenServer will handle the message in its single process
-
:rpcwill perform the specifiedapplyin the RPC server process. There’s one of these per node - a remote
Task.Supervisorwill handle the “start a task” request in its single process, which starts a separate process where the Task does its work
The difference is easier to think about if you imagine the “actual work” part of each of these takes a while - imagine Process.sleep(2000) as a stand-in. If three requests in close succession are sent to the three approaches, here’s what happens:
- the GenServer and
:rpcapproach both take slightly more than 3x the time of one “actual work” step, because they handle messages one-at-a-time - the
Task.Supervisorapproach will take slightly more than 1x the time of an “actual work” step, as it handles messages by starting a process for each
Also Liked
al2o3cr
Both call and cast send messages to the GenServer, but they differ on what they do next.
-
castreturns immediately; it cannot fail, even if the recipient PID has exited or never existed in the first place. -
callwaits for a reply, blocking the process until the GenServer sends a reply
In the three-requests example, the three casts will all return immediately to their callers but the GenServer will process their messages one at a time







