web-dev-qa-db-fra.com

Quelle est la différence entre les modèles de simultanéité de transmission de messages et de mémoire partagée?

Corrigez-moi si je me trompe, mais je suis surpris que cela n'ait pas été demandé auparavant ...

38
blank

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!

82
Chris Pitman
  1. Dans le modèle de mémoire partagée, la mémoire est partagée par les processus coopérants, qui peuvent échanger des informations en lisant et en écrivant des données, mais dans la transmission de messages, la communication a lieu au moyen de messages échangés entre les processus coopérants.
  2. La mémoire partagée permet d’exécuter simultanément des processus, mais pas le passage de messages.
  3. La fonction de transmission de message comporte deux opérations: envoyer (message) et recevoir (message). Le processus dont la taille est fixe ou variable.
  4. La transmission de messages est utile pour échanger de petites quantités de données, car aucun conflit ne doit être évité. La transmission de messages est également plus facile à mettre en œuvre que la mémoire partagée pour la communication interprocessus.
  5. Dans les systèmes à mémoire partagée, les appels système ne sont requis que pour établir des régions de mémoire partagée. Une fois la mémoire partagée établie, tous les accès sont traités comme des accès de mémoire de routine et aucune assistance du noyau n’est requise.

Plus rapide

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.

12
Farah Nazifa

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.

9
JesperE

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

3

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.

2
juned ahmed

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.

1
hengxin

Pour distinguer le passage de messages de la mémoire partagée, prenez en compte cinq éléments:

  1. communication: - En cas de transmission de message, la communication dépend du programmeur, ainsi que du processus auquel elle va communiquer . mais, dans le cas de la mémoire partagée, la communication est automatique.
  2. répartition des données: -m.p (manuellement) s.m (automatique)
  3. Prise en charge H/W: - m.p (simple) S.m (étendu car il doit être intelligent pour détecter automatiquement l'interprocessus)
  4. exactitude: -m.p (difficile) s.m (moins difficile)
  5. performance: -m.p (difficile) s.m (très difficile) `
0
Sarthak Dalabehera

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.

0
John Vincent