Gli zoccoli sono uno a uno. Sono necessari più socket se si desidera inviare la stessa cosa a più processi. Con la memoria condivisa, puoi avere più lettori e anche più scrittori.
I socket sono ad uso intensivo di risorse. Ogni messaggio passa attraverso il sistema operativo. Con la memoria condivisa, si mappa la memoria condivisa, ma una volta nella memoria dell'applicazione e da lì in poi è il tuo da usare. Tuttavia, è ancora necessario passare attraverso il sistema operativo quando si utilizza la memoria condivisa; vedi sotto.
I socket sono sincronizzati (a patto che non si usi UDP). Con la memoria condivisa, è quasi inevitabilmente necessario un meccanismo aggiuntivo per dire ad altri processi che è OK / non OK leggere o scrivere nella memoria condivisa. Non farlo e ti imbatterai in problemi con memoria corrotta. Esempio: supponiamo che il processo A inizi a leggere un blocco di memoria condivisa, ma venga sostituito a metà della lettura. Il processo B scrive sulla stessa porzione di memoria condivisa. Quando il processo A si riavvia e continua a leggere la memoria condivisa, ciò che ha letto è un miscuglio di vecchi e nuovi dati. Per evitare ciò, continui a utilizzare il sistema operativo quando utilizzi la memoria condivisa.
È abbastanza facile convertire un set di applicazioni basato su socket in uno che utilizza socket di rete. È possibile distribuire l'elaborazione a tutte le macchine nel proprio laboratorio o anche più lontano. non posso farlo con la memoria condivisa. Sei bloccato su una macchina con una soluzione basata su memoria condivisa.
I socket sono destinati a volumi ridotti di dati, memoria condivisa per grandi volumi di dati. Esistono diversi meccanismi per risolvere diversi problemi.