Alors les gars, discutons maintenant des contraintes de conception pour l'utilisation de la mémoire partagée en tant qu'IPC.
En d'autres termes, discutons du point de vue de la conception : quand notre application doit-elle utiliser la mémoire partagée comme
technique de communication interprocessus ?
Discutons donc de la recommandation selon laquelle il est bon d'utiliser la mémoire partagée en tant qu'IPC.
L'approche IPC de la mémoire partagée est utilisée dans un scénario où un processus est responsable de la mise à jour de la mémoire partagée.
Le processus responsable de la mise à jour de la mémoire partagée est appelé processus éditeur et les autres processus en cours
d'exécution dans le système sont en fait les lecteurs de la mémoire partagée.
En d'autres termes, ils ne mettent pas à jour la mémoire partagée, mais ils ne font que la lire.
Ils ne lisent que le contenu actualisé de la mémoire partagée.
Ces processus sont donc appelés processus d'abonnement.
Les processus abonnés sont donc ceux qui lisent la mise à jour effectuée par le processus éditeur dans la mémoire
partagée.
Le point suivant que vous devez prendre en considération lorsque vous décidez d'utiliser
ou non la mémoire partagée comme technique IPC est que la fréquence de mise à jour de la mémoire partagée par
le processus de l'éditeur ne doit pas être très élevée.
C'est vrai.
Ainsi, par exemple, le processus de l'éditeur met à jour la mémoire partagée lorsque l'utilisateur configure quelque
chose sur le logiciel.
Ainsi, l'action de l'utilisateur pour configurer quelque chose sur le logiciel est en fait une action qui n'est pas très fréquente en
termes de vitesse des ordinateurs.
Votre processus éditeur ne doit pas mettre à jour le contenu de la mémoire partagée, par exemple, plusieurs milliers
de fois par seconde.
Le critère d'utilisation de la mémoire partagée en tant qu'IPC est donc que le processus éditeur ne doit pas mettre à jour la mémoire
partagée à une fréquence très élevée.
Revenons maintenant au fait qu'il doit y avoir exactement un processus qui doit être responsable de la mise à jour
de la mémoire partagée.
En d'autres termes, il doit y avoir exactement un processus d'édition.
Quelle en est la raison ?
La raison est donc expliquée ici.
Si plusieurs processus tentent de mettre à jour la mémoire partagée en même temps, cela conduit à la droite.
Conflit.
C'est-à-dire que le même morceau de mémoire est écrit par deux processus différents en même temps.
Cela signifie qu'il y a un besoin de synchronisation entre ces processus.
Nous devons donc gérer cette situation en utilisant une synchronisation basée sur l'exclusion mutuelle.
Et chaque fois que vous déployez la synchronisation dans votre logiciel, la synchronisation se fait au détriment de la performance.
Pourquoi ?
Synchronisation, coût.
La performance ?
En effet, nous mettons les threads en veille en plus de leur préemption naturelle par le CPU afin d'empêcher l'accès
simultané à la section critique.
C'est vrai.
Nous mettons donc volontairement les threads en sommeil afin d'empêcher l'accès simultané à la section critique.
Cette action de mise en sommeil des threads réduit donc les performances du logiciel ou, en d'autres termes, la
vitesse d'exécution d'un logiciel.
En résumé, la mémoire partagée en tant qu'IPC est utilisée dans le scénario où il n'y a qu'un seul processus
éditeur et où la fréquence de mise à jour de la mémoire partagée par le processus éditeur n'est pas très élevée.
Voilà donc les deux contraintes que vous devez garder à l'esprit avant de décider d'utiliser ou non
la mémoire partagée comme mécanisme IPC dans votre logiciel.
Maintenant, lorsque le processus de l'éditeur met à jour la mémoire partagée, que se passe-t-il ?
Comment l'abonné serait-il informé de cette mise à jour ?
C'est vrai.
Dans ce diagramme, vous pouvez donc voir que le processus A est un processus éditeur, tandis que les
processus B un et B deux sont des processus abonnés, et que tous ces processus s'exécutent sur le même système.
Nous disposons ensuite d'un morceau de mémoire partagée entre ces trois processus.
Supposons maintenant que le processus de l'éditeur mette à jour la mémoire partagée.
En ce moment, le processus A, qui est un processus éditeur, met à jour la mémoire partagée.
Comment le processus sera-t-il un et le processus sera ?
Deux personnes seraient informées de cette mise à jour.
C'est vrai.
Il devrait y avoir un mécanisme permettant de transmettre les processus B1 et B2.
L'information qu'un processus éditeur vient de mettre à jour la mémoire partagée et que les processus abonnés
doivent également mettre à jour leur structure de données interne en lisant le nouveau contenu de la mémoire partagée.
Pour atteindre cet objectif, après avoir mis à jour la mémoire partagée, le processus d'édition doit envoyer une notification
à tous les abonnés.
qui indique que la mémoire partagée a été mise à jour.
Le processus d'édition doit donc simplement envoyer un très petit message à tous les abonnés.
Ce message signifie que la mémoire partagée a été mise à jour et que les processus abonnés sont censés
lire le nouveau contenu de la mémoire partagée et se mettre à jour.
Ainsi, après avoir reçu cette notification, les abonnés peuvent lire la mémoire partagée mise à jour et mettre à jour leurs structures
de données internes si nécessaire.
La notification générée par l'éditeur et adressée au processus abonné peut
donc être un très petit message, car elle signifie seulement que les processus abonnés
sont censés lire le nouveau contenu de la mémoire partagée.
Cette petite notification peut être envoyée à l'aide d'autres mécanismes IPC tels que Unix, les sockets de domaine ou les files
d'attente de messages.
C'est vrai.
Il s'agit donc d'une petite notification qui pourrait être envoyée à l'aide d'une file d'attente de messages ou de sockets de domaine Unix.
C'est vrai.
C'est donc pour cette raison que l'IPC utilisant la mémoire partagée doit être soutenu ou pris en charge par d'autres types
de mécanismes IPC.
C'est vrai.
Voici donc comment doivent être conçues les applications qui tentent d'utiliser la mémoire partagée.
Le processus éditeur, après avoir mis à jour la mémoire partagée, doit envoyer une notification via d'autres
mécanismes IPC aux processus abonnés pour leur faire savoir que la mémoire partagée a été mise à jour et les processus abonnés
sont alors censés lire le nouveau contenu de la mémoire partagée et se mettre à jour si nécessaire.