El uso de una cola de mensajes verdadera tiende a dejarlo con mensajes de tamaño fijo. Si tiene una gran cantidad de mensajes de tamaños increíblemente variables, esto puede convertirse en un problema de rendimiento. Usar un socket puede ser una forma de evitar esto, aunque luego te quedes tratando de ajustar esta funcionalidad para que sea idéntica a una cola, lo cual es complicado para obtener los detalles correctamente, particularmente aspectos como el bloqueo/no bloqueo y la atomicidad.
La memoria compartida es rápida pero requiere administración (termina escribiendo una versión de malloc para administrar el SHM) además tiene que sincronizarla y bloquearla de alguna manera. Aunque puede utilizar bibliotecas para ayudar con esto, la disponibilidad depende de su entorno e idioma.
Las colas son fáciles pero tienen las desventajas enumeradas como pros en mi discusión de socket.
Las tuberías han sido cubiertas por Blagovests a esta pregunta.
Como siempre sucede con este tipo de cosas, sugiero leer los libros de W. Richard Stevens sobre IPC y tomas de corriente. ¡No hay mejor explicación que la suya! :-)
podría ser el caso de alguna ventaja de desbloqueo de enchufes IPC? – jasonkim