Ich verstehe, dass zwei der vielen weiteren Optionen für die Kommunikation zwischen Prozessen sein können:
- Geteilte Erinnerung
- Steckdosen
Eigentlich habe ich gesehen, dass diese beiden Optionen von Intellij Idea zum Debuggen einer Java-Anwendung verfügbar gemacht wurden. Ich möchte wissen, was die Vor- und Nachteile jedes Ansatzes sind.
Antworten:
Ein paar Vorteile für jeden auf meinem Kopf. Beachten Sie, dass einige dieser Elemente möglicherweise nicht in allen Fällen zutreffen. Dies sind nur allgemeine Beobachtungen.
Steckdosen
Einfach und kontrolliert. Kann bei Bedarf ohne oder mit nur geringen Änderungen auf Netzwerk-Sockets erweitert werden. Das Programmiermodell erfordert eine Serialisierung, bei der Sie überlegen müssen, welche Daten tatsächlich von A nach B übertragen werden. Die Synchronisierung ist notwendigerweise in den Kommunikationsmechanismus integriert. Keine weitere Synchronisation erforderlich.
Geteilte Erinnerung
Erfordert nicht unbedingt einen Systemaufruf (daher möglicherweise schneller). Für die Freigabe müssen keine Daten explizit übertragen werden. Es können Daten zur Verfügung gestellt werden, die der Empfänger nicht abruft (Bandbreite muss nicht verschwendet werden, um Daten zu übertragen, die der Empfänger nicht verwendet). Kein Serialisierungs- / Deserialisierungsschritt bedeutet, dass keine Zeit für den Kommunikationsaufwand aufgewendet wird.
quelle
Steckdosen sind eins zu eins. Sie benötigen mehrere Sockets, wenn Sie dasselbe an mehrere Prozesse senden möchten. Mit Shared Memory können Sie mehrere Leser und auch mehrere Schreiber haben.
Steckdosen sind ressourcenintensiv. Jede Nachricht geht durch das Betriebssystem. Mit Shared Memory ordnen Sie den Shared Memory nur einmal dem Speicher Ihrer Anwendung zu und von da an können Sie ihn verwenden. Sie müssen jedoch immer noch das Betriebssystem durchlaufen, wenn Sie gemeinsam genutzten Speicher verwendet haben. siehe unten.
Sockets werden synchronisiert (solange Sie kein UDP verwenden). Bei gemeinsam genutztem Speicher benötigen Sie fast zwangsläufig einen zusätzlichen Mechanismus, um anderen Prozessen mitzuteilen, dass das Lesen oder Schreiben in den gemeinsam genutzten Speicher in Ordnung / nicht in Ordnung ist. Tun Sie dies nicht und Sie werden auf Probleme mit beschädigtem Speicher stoßen. Beispiel: Angenommen, Prozess A beginnt mit dem Lesen eines gemeinsam genutzten Blockspeichers, wird jedoch während des Lesevorgangs ausgelagert. Prozess B schreibt in denselben Teil des gemeinsam genutzten Speichers. Wenn Prozess A neu gestartet wird und den gemeinsam genutzten Speicher weiter liest, wird ein Mischmasch aus alten und neuen Daten eingelesen. Um dies zu verhindern, gehen Sie immer noch durch das Betriebssystem, wenn Sie gemeinsam genutzten Speicher verwenden.
Es ist ziemlich einfach, einen Socket-basierten Satz von Anwendungen in einen zu konvertieren, der Netzwerk-Sockets verwendet. Sie können die Verarbeitung auf alle Maschinen in Ihrem Labor oder sogar darüber hinaus verteilen. Mit Shared Memory geht das einfach nicht. Sie sind mit einer gemeinsam genutzten speicherbasierten Lösung an einen Computer gebunden.
Sockets sind für kleine Datenmengen vorgesehen, Shared Memory für große Datenmengen. Die verschiedenen Mechanismen existieren, um verschiedene Probleme zu lösen.
quelle