Différence de performance entre la mémoire partagée IPC et la mémoire des threads

J'entends souvent que l'accès à un segment de mémoire partagée entre les processus n'a pas de perte de performance par rapport à l'accès à la mémoire de processus entre les threads. En d'autres termes, une application multi-thread ne sera pas plus rapide qu'un ensemble de processus à l'aide de la mémoire partagée (à l'exclusion de verrouillage ou d'autres problèmes de synchronisation).

Mais j'ai des doutes:

1) shmat() cartes le processus local de la mémoire virtuelle sur le segment partagé. Cette traduction doit être effectuée pour chaque adresse d'une mémoire partagée et peut représenter un coût important. Dans une application multi-thread il n'existe pas de traduction supplémentaires requis: toutes les VM adresses sont convertis en adresses physiques, comme dans un processus régulier qui n'a pas accès à la mémoire partagée.

2) Le segment de mémoire partagée doit être maintenue en quelque sorte par le noyau. Par exemple, lorsque tous les processus attachés à la shm sont prises vers le bas, la shm segment est encore et peut être à terme, d'accéder à nouveau par de nouveaux processus. Il pourrait y avoir des frais généraux liés à noyau opérations sur la shm segment.

Est un multi-processus de la mémoire partagée du système aussi rapide qu'une application multi-thread?

source d'informationauteur Robert Kubrick