Los enchufes son uno a uno. Necesita múltiples sockets si desea enviar lo mismo a múltiples procesos. Con memoria compartida, puede tener múltiples lectores y también múltiples escritores.
Los zócalos requieren muchos recursos. Todos y cada uno de los mensajes pasan por el sistema operativo. Con la memoria compartida, mapea la memoria compartida pero una vez en la memoria de su aplicación y de ahí en adelante es suya. Sin embargo, aún necesita pasar por el sistema operativo cuando usó la memoria compartida; vea abajo.
Los sockets están sincronizados (siempre que no use UDP). Con la memoria compartida, casi inevitablemente necesitará algún mecanismo adicional para decirle a otros procesos que está bien / no está bien leer o escribir en la memoria compartida. No hagas esto y tendrás problemas con la memoria dañada. Ejemplo: suponga que el proceso A comienza a leer un fragmento de memoria compartida, pero se intercambia a mitad de la lectura. El proceso B escribe en ese mismo fragmento de memoria compartida. Cuando el proceso A se reinicia y continúa leyendo la memoria compartida, lo que ha leído es una mezcla de datos antiguos y nuevos. Para evitar esto, aún debe pasar por el sistema operativo cuando usa la memoria compartida.
Es bastante fácil convertir un conjunto de aplicaciones basadas en sockets a uno que use sockets de red. Puede extender el procesamiento a todas las máquinas de su laboratorio, o incluso más allá. simplemente no puedo hacer esto con la memoria compartida. Está bloqueado en una máquina con una solución basada en memoria compartida.
Los sockets están destinados a bajos volúmenes de datos, memoria compartida para grandes volúmenes de datos. Existen diferentes mecanismos para resolver diferentes problemas.