Appearance
39. IPC — Message Queues
Processes exchange discrete messages through a kernel-managed queue — unlike a pipe's raw byte stream, message boundaries are preserved (send("Hello") then send("World") is read back as two distinct messages, not one merged blob).
Key features: message boundaries, priority (higher-priority messages can jump the queue), persistence (messages wait even if the consumer isn't currently running), and blocking/non-blocking/timeout receive modes.
| POSIX System V | ||
|---|---|---|
| API | mq_open/send/receive | msgget/msgsnd/msgrcv |
| Identification | Name (/myqueue) | Integer key |
| Priority | Built-in | Manual |
| Preferred | Modern | Legacy |
| Message Queue Pipe Shared Memory Socket | ||||
|---|---|---|---|---|
| Message boundaries | Yes | No | Manual | No (TCP) |
| Persistence | Yes | No | Yes | No |
| Cross machine | No | No | No | Yes |
| Speed | Medium | Fast | Fastest | Slowest |
Real-world use: Windows GUI event queues (keyboard/mouse/paint events); microservice message brokers like RabbitMQ/Kafka, where one message can fan out to multiple consumers and the queue absorbs load spikes.