0MQ handles I/O asynchronously in background threads. So, when you issue a zmq_send(), that operation doesn’t really send the data; it places it in a queue, which a background thread will service (perform the network I/O). These background threads communicate with application threads using lock-free data structures. This means applications need no locks, semaphores, or other wait states: You’re able to control the number of I/O threads servicing your application when you initialize a socket.
Active Open Source Community
0MQ has a large, active community with interaction available via:
- Mailing lists
- Internet Relay Chat (IRC) bug tracking
- Project laboratory.
Multiple Language Support
Language bindings exist for:
- Chicken Scheme
- Common Lisp
- C# (.NET & Mono)
0MQ is available on multiple platforms, including Linux, Windows, Solaris, and OpenVMS.
While in its basic state, 0MQ is used to construct message-switching applications; the APIs can be used to create your own brokering mechanisms.
0MQ has a concept called devices, used to extend the operation, scale, or function of the messaging system you’re constructing. They tend to be used to connect a set of front-end sockets to a set of back-end sockets. They allow an application to be stretched over as many intermediate nodes as needed, and are placed in the topology where it makes sense for the application.