<br><div class="gmail_quote">On Thu, Jan 12, 2012 at 10:35 AM, eigenfunction <span dir="ltr"><<a href="mailto:emeka_1978@yahoo.com">emeka_1978@yahoo.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
> If you don't need to serialize your data<br>
> processing requests, don't bother with all that.<br>
<br>
</div>Could you pls elaborate more on that? I, Like the OP , sometimes<br>
have a hard time making a difference between a gen_server and a normal<br>
process,<br>
and i end up using normal processes and think that i am doing<br>
something wrong.<br>
Can anyone give an example of a case where a gen_server is more useful<br>
than a normal<br>
process?<br>
<div class="HOEnZb"><div class="h5"><br></div></div></blockquote><div><br>A gen_server wraps up a resource through client-server interaction. From the documentation (<a href="http://www.erlang.org/doc/design_principles/gen_server_concepts.html#id55988">http://www.erlang.org/doc/design_principles/gen_server_concepts.html#id55988</a>):<br>
<br>"The client-server model is characterized by a central server
      and an arbitrary number of clients. The client-server model is
      generally used for resource management operations, where several
      different clients want to share a common resource. The server is
      responsible for managing this resource."<br><br>The key here is that you want multiple clients to share one common resource. Thus you have to provide a way to handle multiple requests from your clients in a defined way. The gen_server does that for you.<br>
<br>Sometimes your model does not need a shared common resource, instead you bring lots of processes to life that do work.<br><br>For example, I use a gen_server to handle comms with a C Node that runs Lua code. This means I don't have to worry about asynchronous requests in my C or Lua code.<br>
<br>I have another component that handles messages from RabbitMQ and here I simply care about handling the message, so I kick of a process to deal with the message. (This is low-volume messaging, in case you start wondering about the sanity of this approach :-)<br>
<br>Robby<br><br> </div></div>