Corrigez-moi si je me trompe, mais je suis surpris que cela n'ait pas été demandé auparavant ...
C'est une différence assez simple. Dans un modèle de mémoire partagée, plusieurs utilisateurs utilisent tous les mêmes données. Cela ouvre beaucoup de problèmes de concurrence qui sont communs dans la programmation parallèle.
Les systèmes de transmission de messages permettent aux travailleurs de communiquer via un système de messagerie. Les messages séparent tout le monde, de sorte que les travailleurs ne peuvent pas modifier les données de chacun.
Par analogie, supposons que nous travaillions ensemble sur un projet. Dans un modèle, nous sommes tous rassemblés autour d'une table, avec tous nos papiers et données présentés. Nous ne pouvons communiquer qu'en changeant les choses sur la table. Nous devons faire attention à ne pas tous essayer d'exploiter le même fichier de données en même temps, sinon cela risque de semer la confusion et de tout mélanger.
Dans un modèle de transmission de messages, nous sommes tous assis à notre bureau, avec nos propres papiers. Lorsque nous le souhaitons, nous pouvons transmettre un document à quelqu'un d'autre en tant que "message", et ce travailleur peut désormais faire ce qu'il veut. Nous n’avons jamais accès qu’à ce que nous avons sous les yeux, nous n’avons donc jamais à craindre que quelqu'un tienne la main et modifie l’un des chiffres pendant que nous sommes en train de le résumer.
Ok, analogie stupide!
La mémoire partagée permet une vitesse et une commodité maximales de communication, comme cela peut être fait à une vitesse de mémoire lorsque vous êtes dans un ordinateur. La mémoire partagée est plus rapide que la transmission de messages, car les systèmes de transmission de messages sont généralement implémentés à l'aide d'appels système et nécessitent donc la tâche plus fastidieuse de l'intervention du noyau.
Les modèles de transmission de messages (Erlang, par exemple) n'ont pas d'état partagé; toute la synchronisation et la communication se font en échangeant des messages. Les modèles de mémoire partagée communiquent par lecture/écriture avec des blocs de mémoire partagée protégés par des sémaphores ou similaires.
le passage de messages est une bonne méthode pour justifier les données mais il a un temps de réponse lent pour une communication plus rapide.Mais dans la mémoire partagée, les données du modèle sont extraites d'une mémoire et un groupe de travail peut effectuer un travail différent sur les mêmes données
Le débit du système de transmission de messages peut être trop faible pour certaines applications nécessitant des temps de réponse rapides, mais si vous avez besoin d'un traitement plus rapide ou en temps réel, vous pouvez utiliser un système à mémoire partagée.
Bien que vous demandiez les différences entre le modèle de transmission de messages et le modèle de mémoire partagée et que vous ayez déjà obtenu de bonnes réponses concernant leurs performances, les moyens d’échange d’informations et les problèmes de simultanéité, je voudrais souligner que:
Il peut y avoir n pas de différences fondamentales entre eux en ce qui concerne leur calculabilité (sous certaines conditions).
Vous pouvez simuler une mémoire partagée sur le système de transmission de messages sous-jacent. Cela permet de voir le modèle de mémoire partagée comme un langage de niveau supérieur permettant de concevoir des algorithmes dans des systèmes de transmission de messages distribués asynchrones.
En particulier, cet article ABD @ JACM'95 montre que
Tout algorithme sans attente basé sur des registres à plusieurs lecteurs atomiques, à écrivain unique (et à écrivains multiples) peut être automatiquement émulé dans les systèmes de transmission de messages, à condition qu'au moins une majorité des processeurs ne soient pas en panne et restent connectés. La surcharge introduite par ces émulations est polynomiale dans le nombre de processeurs du système.
Pour distinguer le passage de messages de la mémoire partagée, prenez en compte cinq éléments:
Les réponses déjà données sont informatives, mais la plupart mentionnent l'idée que la mémoire partagée est plus rapide que le passage de messages, ce qui est en fait une déclaration assez naïve. Dans tout système réel qui fait quelque chose d’utile, l’accès à la mémoire partagée a besoin de mécanismes de verrouillage pour contrôler l’accès à partir de threads distincts, ce qui aboutit presque toujours plus lent que l’implémentation du même système en utilisant le transfert de messages.