[e-lang] Proposal: E / Erlang integration

Ulf Wiger ulf@REDACTED
Thu Jun 8 20:44:12 CEST 2006


Den 2006-06-08 18:04:41 skrev Mark S. Miller <markm@REDACTED>:

> Regarding concurrency control, E's event-loops are non-blocking. By
> contrast, the preferred Erlang style for sending a request and
> receiving a response is for the requesting process to do a blocking
> receive that is receptive only to the alleged response (where the
> alleged response is distinguished from other requests by
> convention). This would seem to leave networks of Erlang processes
> vulnerable to deadlock. Continuing with section 24.2 of my thesis:
>
>> Although Erlang was inspired by Actors, a common programming pattern
>> in Erlang is for a process to block waiting for a reply to a
>> previous request. While blocked, the process is not responsive to
>> other requests. This is like the "message-oriented systems" of Lauer
>> and Needham [LN79] rather than the non-blocking event loops of E.
>
>> [LN79] Hugh C. Lauer and Roger M. Needham. On the Duality of
>> Operating System Structures. In Proc. 2nd International Symposium on
>> Operating Systems, pages 3--19. IRIA, October 1979. ACM Operating
>> System Review.
>  However, if Erlang systems don't seem to be vulnerable to deadlock in
> practice, the Erlang community may not find the above difference
> compelling.

You could read and perhaps comment on my presentation at EUC 05:

Structured Network Programming  
(http://www.erlang.se/euc/05/1500Wiger.ppt), where I take a basic  
telephony problem ("complex concurrency") and implement it both using  
selective receive and in an event-driven, non-blocking fashion. One of the  
things to note is that while it is possible to accomplish low-level  
deadlocks, the application-level concurrency issues are the really hairy  
ones. You may well accomplish an application-level deadlock even with a  
fully non-blocking, event-driven design. These deadlocks are extremely  
difficult to foresee and debug. I argue that non-blocking event-driven  
programming can lead to a complexity explosion in certain situations. This  
is hardly an original idea. Mike Williams, Bjarne Däcker and others wrote  
about this already in the late 70's, I believe (at least in internal  
Ericsson documents.) However, it's not that well covered in teaching  
material.

In Erlang, programmers tend to learn pretty quickly to insert timeout  
guards on receive statements most of the time. If one uses gen_servers,  
there's a built-in 5-second timeout. This way, your processes will crash  
rather than deadlock, which at least gives you a clear indicator that  
something went wrong, and sometimes even lets the program continue.

BR,
Ulf Wiger
-- 
Ulf Wiger



More information about the erlang-questions mailing list