Daniel DeLorme wrote:
> Thanks for all the answers. I now have:
> 
> primitives:
>  - TCPServer/TCPSocket
>  - UNIXServer/UNIXSocket
>  - IO.pipe
>  - named pipes
>  - shared memory (can't find low-level lib?)
> 
> libraries: (after some digging on rubyforge)
>  - DRb
>  - Event Machine
>  - ActiveMessaging
>  - Slave
>  - BackgroundDRb
>  - System V IPC
>  - POSIXIPC (not released)
>  - reliable-msg
>  - MPI Ruby
>  - stomp / stompserver / stompmessage
>  - AP4R (Asynchronous Processing for Ruby)
> 
> Frankly I'm still not entirely clear on what are the advantages of each, 
> both in terms of features and in terms of performance. I guess I'll just 
> have to write some code to find out...
> 
> Daniel
> 
> 

1. You missed Rinda, a Linda derivative layered on top of DRb.

2. There are basically two ways to do concurrency/parallelism: shared 
memory and message passing. I'm not sure what the *real* tradeoffs are 
-- I've pretty much had my brain hammered with "shared memory bad -- 
message passing good", but there obviously must be *some* 
counter-arguments, or shared memory wouldn't exist. :)

3. System V IPC has three components -- message queues, semaphores, and 
shared memory segments. So ... if you've found a System V IPC library, 
you've found a shared memory library.