Can't watch the video right away, but I'll just say that every time I read the ZeroMQ guide (<a href="http://zguide.zeromq.org/page:all" rel="nofollow">http://zguide.zeromq.org/page:all</a>) I am frustrated by the lack of any clear technical explanation of ZeroMQ's basic architecture.<p>Today I gave it another shot, and after half an hour of trying to glean technical detail and skipping any parts that read like a like a comic book ("zap-pow-kaboom satori paradigm-shift moment"), I think I've learned the following:<p><pre><code> * ZMQ works by spawning a background thread that runs a
poll() (or equivalent)-based async I/O loop. This thread
is created when you create a ZMQ "context."
* On top of a context you can create a ZMQ "socket", which
may map to N underlying UNIX sockets (or a comparable
transport), and which will transparently queue data to slow
or unavailable receivers.
* Over a socket you can send or receive "messages", which
are length-delimited strings which are always delivered
in full with the original length. Send/receive can be
either blocking or non-blocking.
* Contexts can be shared across threads, but sockets are
not thread-safe. Communication between application threads
and the ZMQ I/O thread is via a lock-free queue.
</code></pre>
The main features seem to be topology-agnostic programming (since you don't have to know what a socket is connected to to send/receive over it) and transparent queuing. In my opinion transparent queues can be problematic because they transparently use up memory that can be hard to account for. Topology-agnostic programming certainly seems interesting, but in my experience of distributed systems programming I never seem to need or want complex messaging topologies. I guess I don't really get what all the hype is about. Maybe I should watch the video.