[erlang-questions] gen_server vs gen_fsm

Chandru <>
Mon Oct 8 10:52:58 CEST 2007


On 08/10/2007, YC <> wrote:
> Hi all -
> I have a few newbie questions regarding gen_server and gen_fsm - I couldn't
> find the answers easily though I'm sure they exists somewhere; would
> appreciate pointers and sharing of experiences in designs :)
> * are gen_fsm also a "server"?  It seems like gen_fsm is used to manage a
> process that have multiple stages to fulfill its job, where gen_server by
> and large has only one state, is that correct?  If not, what are the
> differences?

A gen_fsm helps you implement the logic for a finite state machine.
You can implement a FSM using gen_server but gen_fsm makes it much
more easier and your code will be more structured and easier to read.

> * when should one use gen_fsm?  and when should one use a gen_server?

Use a gen_server when you want a long lived process which reacts to
events. Use a gen_fsm to implement state machines. See

> * I've read that the best way to handle multiple requests is to use
> {noreply, State} in conjunction to spawn worker processes to handle the
> request - should the worker process also be gen_server or gen_fsm?  For
> example, what should a web server's worker process be?

A web server's worker process doesn't have to be a gen_server or a
gen_fsm. It just needs to be a module which given the HTTP request,
does some processing and returns some content to the HTTP client.

> * what's a good way to test the spawning to make it that it works?  I mean,
> are there available tools to simplify the process?

Sorry - I don't understand your question.


More information about the erlang-questions mailing list