Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 2494|Antwort: 1

[Tipps] Zwei oder drei Dinge zu Shared Memory

[Link kopieren]
Veröffentlicht am 23.07.2024 14:50:48 | | | |
Teilnahme an der Verlagerung eines alten Systems, bei dem Shared Memory zur Kommunikation zwischen Prozessen verwendet wird (z. B. durch das Aufrufen des Window Service ASP.NET), und wird gezwungen, die Bedeutung dieser Technologie zu verstehen. Die unbeliebte Technologie der NET-Entwickler, besondere Anmerkungen.

[Was ist geteiltes Gedächtnis?] 】
Es gibt einen Begriff für prozessübergreifende Kommunikation, Interprocess Communictaion (IPC), der auf der Windows-Plattform folgende Optionen bietet: Referenz:Der Hyperlink-Login ist sichtbar.

Zwischenablage
Programm A fügt den Inhalt in die Zwischenablage ein, und Programm B ruft den Inhalt von der Zwischenablage ab.
COM
OLE Compound Document erlaubt es, Word-Dateien in Excel-Arbeitsblätter einzubetten, und Excel kann mit zwei Klicks zum Bearbeiten aufgerufen werden.
Datenkopie
Programm A sendet WM_COPYDATA Nachrichten im vereinbarten Format an Programm B
DDE
DDE ist ein Kommunikationsprotokoll, das es verschiedenen Anwendungen ermöglicht, Daten in unterschiedlichen Formaten auszutauschen, was als Erweiterung der Zwischenablage betrachtet werden kann und zusätzlich zu einmaligen Übertragungen kontinuierlich übertragen werden kann. (Relativ schlechte Leistung, nicht mehr zu empfehlen)
Dateizuordnung
File Mapping bezeichnet die Simulation einer Datei als Speicherstück in einem Prozess, bei der mehrere Anwendungen Daten durch gemeinsames Dateimapping austauschen, genannt Named Shared Memory, was die beste Leistung unter verschiedenen IPC-Methoden darstellt, aber durch Synchronisationsmechanismen wie Mutex verhindert werden muss.
Briefschlitz
Einwegkommunikation: Mailslot-Client sendet Nachrichten an den Mailslot-Server, und die Nachrichten werden nach dem Lesen durch den Server gelöscht, was die Übertragung über mehrere Maschinen unterstützt und auch eins-zu-viele gesendet werden kann. (Die Länge der Broadcast-Nachricht ist auf 400 Bytes begrenzt, und die Länge der Nachricht wird vom Mailslot-Server bestimmt, wenn sie für die Eins-zu-eins-Übertragung eingerichtet wird.)
Dudelsack
Die bidirektionale Übertragung ist in Anonymous Pipe und Named Pipe unterteilt. Anonymous Pipe wird im Allgemeinen für die standardmäßige Ein-/Ausgabe-Orientierung zwischen dem Elternprogramm und dem Kindprogramm verwendet, und es sollten zwei Pipes für die zweiseitige Kommunikation gebaut werden, die nicht über das Netzwerk verteilt werden kann und auf Prozesse mit abhängigen Beziehungen beschränkt ist. Named Pipe kann verwendet werden, um Daten zwischen jedem Prozess auszutauschen und den Netzwerkübergreifenden Prozesstransfer zu unterstützen.
RPC
Remote Procedure Call (RPC) ermöglicht es Anwendungen, Funktionen aufzurufen, die von anderen Anwendungen bereitgestellt werden, und können netzwerkübergreifend aufgerufen werden. Windows RPC entspricht dem ISO-DCE-Standard und unterstützt systemübergreifende Integration.
Fenster-Sockets
Abstrakte Kommunikationsschnittstelle basierend auf TCP/IP oder anderen Netzwerkprotokollen, und der Datenaustausch erfolgt über Netzwerkverbindungen in der unteren Schicht.
Shared Memory ist eine gängige Datenaustauschmethode, die von C/C++-Entwicklern verwendet wird (Google findet viele Beispiele für IPC, die mit Shared Memory unter Linux implementiert wurden), daher wählen C/C++-Entwickler es oft als Kommunikationskanal auf der Windows-Plattform.

【Gemeinsames Gedächtnis Praktische Übung】
Obwohl es weniger Leute gibt, die es nutzen, hat .NET einen integrierten System.IO.MemoryMappedFiles-Namensraum. Es ist nicht schwer, Shared Memory zu spielen, fast wie Betriebsdateien. Solange man Erfahrung mit FileStream-bezogenen Operationen hat, kann man schnell loslegen. Siehe das MSDN-Beispiel, ich habe eine Mini-Programmübung geschrieben.Der Hyperlink-Login ist sichtbar.

Ich schrieb zwei Programme, ProcessA, um mit MemoryMappedFile.CreateNew() einen Raum von 1024 Bytes zu erstellen und mit dem anderen ProcessB das Passing und Catching zu üben. Da 1024 Bytes von zwei Programmen gemeinsam genutzt werden, plane ich, dass die ersten 512 als ProcessA für ProcessB geschrieben werden und die letzten 512 als ProcessB-Read, und das Programm verwendet CreateViewStream, um die Startadresse und Länge zu übergeben, um auf seinen eigenen Bereich zu zeigen. Um Lese-/Schreibkonflikte zu vermeiden, wenn ProcessA und ProcessB auf die MemoryMappedFile zugreifen, verwende ich Mutex Lock, um zu steuern, dass nur ein Prozess gleichzeitig auf die MemoryMappedFile zugreifen kann. Der Testprozess erstellt eine MemoryMappedFile für ProcessA, schreibt die Nachrichtenzeichenkette – > ProcessB liest die Nachrichtenzeichenkette und schreibt die Antwortzeichenkette – > ProcessA liest die Antwortzeichenkette und endet.

Das ProcessA-Verfahren ist wie folgt:

Das ProcessB-Verfahren ist wie folgt:

Der Test war erfolgreich!



【Ergänzende Tipps】

1. Wie kann ich die MemoryMappedFile anzeigen, die derzeit unter Windows aktiviert ist?

SystemInternals verfügt über ein AccessChk-Tool, das alle Dateien, Ordner, Register, Objekte und Windows-Dienste auflistet, die für Windows zugänglich sind. MemoryMappedFile ist ein Windows-Objekt, und du kannst den folgenden Befehl verwenden, um alle Objekte aufzulisten und zu archivieren
accesschk -osv > e:\objList.txt
Suchen Sie nach dem Namen von MemoryMappedFile darin, und falls er existiert, sehen Sie einen ähnlichen Datensatz wie folgt:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Typ: Abschnitt
  Mittlerer Pflichtlevel (Standard) [Kein Ermahnung]
  RW NT AUTHORITY\SYSTEM
    SECTION_ALL_ACCESS
  RW DOMAIN\BenutzerName
    SECTION_ALL_ACCESS
  RW DOMAIN\Benutzername-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

AccessChk-Tool herunterladen:Der Hyperlink-Login ist sichtbar.

2. Das MemoryMappedFile-Preset ist in der Sitzung des Benutzers aktiviert, und das Preset kann nicht über Sitzungen hinweg verwendet werden. Wenn zum Beispiel zwei ASP.NET, die zu verschiedenen AppPools gehören, unterschiedliche Ausführungsidentitäten haben, ist es auch dann eine Kopie von jedem, selbst wenn der Name der MemoryMappedFile gleich ist, sodass es notwendig ist zu bestätigen, dass die von beiden Parteien verwendete Ausführungsidentität gleich ist.

3. Um über verschiedene Ausführungsidentitäten hinweg zu kommunizieren, kann die MemoryMappedFile "Global\ Dateiname" genannt werden (beachte, dass der Fall Global anders ist, ich bin auf den Donner getreten, der fälschlicherweise als GLOBAL-Pfad ungültig geschrieben wurde), sodass er über Ausführungsidentitäten hinweg zugänglich ist.
Es sollte jedoch beachtet werden, dass Prozesse außer Session 0 (Windows Service) die Berechtigung SeCreateGlobalPrivilege benötigen, um ein Global\... MemoryMappedFile。 (MSDN-Datei)
Für Session 0 kannst du auf diesem Artikel von MVP auf der anderen Seite nachschlagen – Penetrating Session 0 Isolation (1) (Der Hyperlink-Login ist sichtbar.Es gibt eine sehr ausführliche Einleitung.

Nachdruck von:Der Hyperlink-Login ist sichtbar.





Vorhergehend:Problem mit statischer Ressourcenbelastung für Angular 18 Bilder
Nächster:Erhalten Sie einen kurzen Überblick über die Dateiinhaltsstruktur von Bootstrap 5
 Vermieter| Veröffentlicht am 10.08.2024 21:36:57 |
.NET/C# implementiert das Programm Singleton basierend auf Mutex und MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com