• Uncategorized

About linux : Using-pipes-over-message-queues-for-message-based-communication

Question Detail

There is a inter-process communication use case were two related processes need to communicate requests/responses (fixed structure messages) to each other, no prioritization for requests is needed.
According to my understanding since this is a message-based communication it is more convenient to use message queues. But I encountered some implementations that uses pipes (they construct message headers to be able to pack/unpack messages over byte stream).

So my question is, what is the benefit of using pipes over message queues in this use case (or in message-based communication in general), is this just a bad design or there are benefits that overcome the cost of adding code to pack/unpack messages over byte stream?

Question Answer

Let’s try to make a short table.

pipe() POSIX mq_*
less resources, simple more complicated
always available just everywhere needs CONFIG_POSIX_MQUEUE Linux Kernel option
easy to use, known and used everywhere almost forgotten nowadays and specific use cases
messages less than PIPE_BUF (4096 on linux, at least 512) are guaranteed be written/read in one go builtin messages boundaries
just a fifo builtin priorities of messages, the most important get’s delivered first
you can use poll/select You can’t use poll/select. (Except you can on Linux, not portable).
auto-cleanup auto-cleanup after unlink() / needs synchronization of processes to do proper cleanup
standard way of sharing a channel between forks / is local to the process can communicate between unrelated processes / the name is global, unix permissions access appplies
ulimit -n (/etc/security/limits.conf) limit open file descriptors NAME_MAX limits the name (and mqd_t is also file descriptor on linux)
need to link with rt when compiling
can be connected to standard streams requires special mq_* interface
uses read/write syscalls uses special mq_* syscall (on Linux)

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.