Actually it is based upon your useage and OS system.
In vxworks,
"message queue" is the primary intertask communication mechanism. It is FIFO order. Any task and interrupt can send a message to a queue. Please note that full duplex communication between two tasks need two message queues.
"pipe" is a mechanism to let tasks to communicate with each other through the standard I/O interface. It can be read/write... For general meaning, pipe has more overhead than message queue because it use I/O lib. But pipe can allow a task to wait for data to be available on any of a set of I/O devices. So using pipe, a task can wait for data on a combination of several pipes, sockets and serial devices.
Message has more flexible options for timeouts and message priorities. Pipe can fit your complex need.
------Not very sure whether it can fit your want. And is there anyone knows about these two useage in other Embed-OS?