[erlang-questions] The gen server simplified (how it works)
Attila Rajmund Nohl
attila.r.nohl@REDACTED
Wed Apr 20 20:23:16 CEST 2011
2011/4/20, Jeroen Koops <koops.j@REDACTED>:
[...]
> On a related note, I have been moving away from using gen_servers all the
> time. The reason for this is that in a gen_server, the state consists of
> just the state term. In an arbitrary process, the state actually consists of
> the process' entire call-stack, and it makes the flow in code such as the
> almost proverbial:
>
> idle() ->
> receive
> { Number, incoming } ->
> start_ringing(),
> ringing(Number);
> off_hook ->
> start_tone(),
> dial()
> end.
>
> ... much easier to follow than when using a gen_server or gen_fsm.
On the other hand it's far from the functionality of a gen_server,
because e.g. it doesn't send back data to the caller. When you add
this functionality, you essentially reinvent the gen_server.
In other words: gen_server is great to provide safe access to shared
data, maybe it's not so great to control stuff. There's one more great
point in using the gen_* behaviours - they provide usually useful and
detailed crash reports when something goes wrong.
More information about the erlang-questions
mailing list