continued init (RE: OTP or not to OTP)
    Matthias Lang 
    matthias@REDACTED
       
    Mon Mar  3 15:29:14 CET 2003
    
    
  
Sean Hinde writes:
 > I do believe that we are
 > slightly kidding ourselves when we say that Erlang makes concurrent
 > programming easy* - it is easy (ish) to make simple 'object' type processes
 > but it is possible to get into an enormous mess of deadlocks and so on if
 > you try to get too tricky. This to me is another reason why gen_servers and
 > so on are a good thing - they stop people trying to get too complex and then
 > find that after a couple of months some weird network conition occurs which
 > deadlocks the whole thing.
Even with gen_servers, the only thing preventing deadlock in most of
the systems I write is the diagram on my whiteboard of which
gen_servers are allowed to call which other gen_servers. Otherwise
it's too easy to get into this situation:
   a.erl:
    lookup_something_else() -> gen_server:call(?MODULE, lookup_something_else).
    handle_call(_,_,_) ->
         b:lookup_something(),
         ...
   b.erl:
    lookup_something() -> gen_server:call(?MODULE, lookup_something).
    handle_call(_,_,_) ->
         a:lookup_something_else(),
         ...
The positive thing about Erlang is that these types of mistakes almost
always result in a deadlock followed by a timeout (as compared to
corruption, crash or a permanently hung thread).
Matthias
    
    
More information about the erlang-questions
mailing list