Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 2494|Odpoveď: 1

[Tipy] Dve alebo tri veci o zdieľanej pamäti

[Kopírovať odkaz]
Zverejnené 23. 7. 2024 14:50:48 | | | |
Účasť na presune starého systému, kde sa zdieľaná pamäť používa na komunikáciu medzi procesmi (napr. volanie Window Service ASP.NET), a je nútený pochopiť dôležitosť tejto technológie. Nepopulárna technológia vývojárov NET, špeciálne poznámky.

[Čo je zdieľaná pamäť?] 】
Existuje pojem pre komunikáciu medzi procesmi, Interprocess Communication (IPC), ktorý má na platforme Windows nasledujúce možnosti: Referencia:Prihlásenie na hypertextový odkaz je viditeľné.

Schránka
Program A vloží obsah do schránky a Program B obsah z klipbordu získa.
COM
OLE Compound Document umožňuje vkladať Word súbory do Excel pracovných listov a Excel je možné vyvolať na úpravu dvoma kliknutiami.
Kópia dát
Program A posiela WM_COPYDATA správy programu B v dohodnutom formáte
DDE
DDE je komunikačný protokol, ktorý umožňuje rôznym aplikáciám vymieňať si dáta v rôznych formátoch, čo možno považovať za rozšírenie schránky a môže byť prenášaný nepretržite okrem jednorazových prenosov. (Relatívne slabý výkon, už sa neodporúča)
Mapovanie súborov
Mapovanie súborov označuje simuláciu súboru ako časti pamäte v procese, keď viaceré aplikácie vymieňajú dáta prostredníctvom zdieľaného mapovania súborov, nazývaného Named Shared Memory, čo je najlepší výkon spomedzi rôznych IPC metód, ale musí byť zabránené synchronizačnými mechanizmami, ako je Mutex.
Poštové sloty
Jednosmerná komunikácia, Mailslot klient odosiela správy na Mailslot Server, ktoré sú po prečítaní serverom vymazané, čo podporuje prenos medzi strojmi a môže byť tiež vysielané jeden na viac. (Dĺžka vysielanej správy je obmedzená na 400 bajtov a dĺžku správy určuje Mailslot Server pri jeho vytvorení pre prenos jeden na jedného)
Gajdy
Obojsmerný prenos sa delí na anonymnú rúru a pomenovanú rúru. Anonymous Pipe sa zvyčajne používa na štandardnú orientáciu vstup/výstup medzi rodičovským programom a podprogramom a pre obojsmernú komunikáciu, ktorá nemôže byť cez sieť a je obmedzená na procesy s závislými vzťahmi, by mali byť postavené dva potrubia. Named Pipe môže byť použitý na výmenu dát medzi akýmkoľvek procesom a podporu prenosu procesov medzi sieťami.
RPC
Vzdialené volanie procedúry (RPC) umožňuje aplikáciám volať funkcie poskytované inými aplikáciami a môžu byť volané naprieč sieťami. Windows RPC je v súlade so štandardom ISO DCE a podporuje integráciu naprieč operačnými systémami.
Sockety pre Windows
Abstraktné komunikačné rozhranie založené na TCP/IP alebo iných sieťových protokoloch a výmena dát prebieha prostredníctvom sieťových spojení na spodnej vrstve.
Zdieľaná pamäť je bežná metóda výmeny dát používaná vývojármi C/C++ (Google nájde mnoho príkladov IPC implementovaných so zdieľanou pamäťou na Linuxe), preto ju vývojári C/C++ často vyberajú ako komunikačný kanál na platforme Windows.

【Praktické cvičenie zdieľanej pamäti】
Aj keď ho používa menej ľudí, .NET má zabudovaný menný priestor System.IO.MemoryMappedFiles, nie je ťažké hrať Shared Memory, takmer rovnako ako operačné súbory, pokiaľ máte skúsenosti s operáciami súvisiacimi so FileStream, môžete začať rýchlo, pozrite si príklad MSDN, napísal som mini programové cvičenie.Prihlásenie na hypertextový odkaz je viditeľné.

Napísal som dva programy, ProcessA na vytvorenie priestoru 1024 bajtov pomocou MemoryMappedFile.CreateNew() a precvičoval som passing a catching s druhým ProcessB. Keďže 1024 bajtov zdieľajú dva programy, plánujem, že prvých 512 bude ProcessA zapísaných do ProcessB a posledných 512 bude ProcessB zapísaných do ProcessA read, pričom program používa CreateViewStream na zadávanie počiatočnej adresy a dĺžky na ukazovanie do vlastnej oblasti. Aby som predišiel konfliktom čítania/zápisu pri prístupe ProcessA a ProcessB k MemoryMappedFile, používam Mutex lock na kontrolu, že len jeden proces môže mať prístup k MemoryMappedFile naraz. Testovací proces vytvorí MemoryMappedFile pre ProcesA, zapíše reťazec správ – > ProcesB, ktorý prečíta a zapíše reťazec odpovede – > ProcesA prečíta reťazec odpovede a ukončí to.

Postup ProcessA je nasledovný:

Postup ProcessB je nasledovný:

Test bol úspešný!



【Doplnkové tipy】

1. Ako zobrazím MemoryMappedFile, ktorý je momentálne zapnutý vo Windows?

SystemInternals má nástroj AccessChk, ktorý zobrazuje všetky súbory, priečinky, registre, objekty a Windows služby prístupné pre Windows. MemoryMappedFile je objekt pre Windows a môžete použiť nasledujúci príkaz na zoznam všetkých objektov a ich archiváciu
accesschk -osv > e:\objList.txt
Vyhľadajte v ňom názov MemoryMappedFile a ak existuje, môžete vidieť záznam podobný nasledovnému:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Typ: Sekcia
  Stredná povinná úroveň (predvolená) [Bez napomenutia]
  RW NT AUTHORITY\SYSTEM
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName
    SECTION_ALL_ACCESS
  RW DOMAIN\UserName-S-1-5-5-0-954410
    SECTION_ALL_ACCESS

Stiahnuť nástroj AccessChk:Prihlásenie na hypertextový odkaz je viditeľné.

2. Prednastavenie MemoryMappedFile je povolené v relácii používateľa a toto prednastavenie nie je možné používať naprieč reláciami. Napríklad, ak majú dve ASP.NET patriace do rôznych AppPoolov rôzne vykonávacie identity, aj keď je názov MemoryMappedFile rovnaký, stále ide o jednu kópiu každého, preto je potrebné overiť, že vykonávacia identita používaná oboma stranami je rovnaká.

3. Na komunikáciu medzi rôznymi vykonávacími identitami môže byť MemoryMappedFile nazvaný "Global\ Filename" (poznámka: prípad Global je iný, našiel som hrom, ktorý bol omylom napísaný ako GLOBAL path is invalid), aby bol prístupný naprieč vykonávacími identitami.
Treba však poznamenať, že procesy iné ako Session 0 (Windows Service) musia mať povolenie SeCreateGlobalPrivilege na vytvorenie Global\... MemoryMappedFile。 (MSDN súbor)
Pre Session 0 sa môžete pozrieť na tento článok od MVP na druhej strane - Penetrating Session 0 Isolation (1) (Prihlásenie na hypertextový odkaz je viditeľné.Je v ňom veľmi podrobný úvod.

Prevzaté z:Prihlásenie na hypertextový odkaz je viditeľné.





Predchádzajúci:Problém so statickým načítaním zdrojov na Angular 18
Budúci:Získajte rýchly prehľad o štruktúre obsahu súborov Bootstrap 5
 Prenajímateľ| Zverejnené 10. 8. 2024 21:36:57 |
.NET/C# implementuje programový singleton založený na Mutex a MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com