Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 2494|Válasz: 1

[Tippek] Két-három dolog a Shared Memory-vel kapcsolatos

[Linket másol]
Közzétéve 2024. 07. 23. 14:50:48 | | | |
Részt vesz egy régi rendszer áthelyezésében, ahol a Shared Memory processek közötti kommunikációra (például az Ablak Szolgáltatás ASP.NET hívására), és kénytelen megérteni ennek a technológiának a fontosságát. A NET fejlesztők népszerűtlen technológiája, külön megjegyzések.

[Mi az a Közös Memória?] 】
A folyamatok közötti kommunikációra létezik egy kifejezés, az Interprocess Communictaion (IPC), amely a Windows platformon az alábbi opciókat kínálja: Hivatkozás:A hiperlink bejelentkezés látható.

Vágólap
Az A program beilleszti a tartalmat a vágóasztalba, a B program pedig visszanyeri a tartalmat a clipboardból.
COM
Az OLE Compound Document lehetővé teszi, hogy Word fájlokat beágyazzanak az Excel munkalapokba, és az Excel két kattintással előhívható szerkesztésre.
Adatmásolat
Az A program WM_COPYDATA üzenetet küld a B programnak a megegyezett formátumban
DDE
A DDE egy kommunikációs protokoll, amely lehetővé teszi különböző alkalmazások számára, hogy különböző formátumokban adatokat cseréljenek, amelyek a klipboard kiterjesztésének tekinthetők, és folyamatosan továbbíthatók az egyszeri átvitelek mellett. (Viszonylag gyenge teljesítmény, már nem ajánlott)
Fájlleképezés
A fájlleképezés azt jelenti, hogy egy fájlt egy memóriadarabként szimulálnak egy folyamatban, amikor több alkalmazás megosztott fájlleképezésen keresztül cserél adatokat, amelyet Named Shared Memory-nek neveznek, és amely a legjobb teljesítmény az IPC módszerek között, de ezt a szinkronizációs mechanizmusoknak, például Mutexnek kell megakadályozni.
Postanyerők
Egyirányú kommunikáció esetén a Mailslot Client üzeneteket küld a Mailslot szervernek, és az üzeneteket a szerver olvasása után törlik, így a gépek közötti átvitel is támogatható, és egy-többen is sugározhatók. (A sugárzott üzenet hossza 400 bájtra korlátozott, és az üzenet hosszát a Mailslot szerver határozza meg, amikor az egy-egy adásra van beállítva)
Csövek
A kétirányú átvitel Anonim Csőre és Névre osztott. Az Anonymous Pipe-t általában a szülőprogram és a gyermekprogram közötti szabványos bemenet/kimeneti orientációhoz használják, és két vezetéket kell építeni kétirányú kommunikációra, amely nem lehet a hálózaton átívelő, és csak a függő kapcsolatok kezelésére korlátozódik. A Named Pipe bármely folyamat közötti adatcserére használható, és támogatja a hálózaton átterjedő folyamatátvitelt.
RPC
A távoli eljáráshívás (RPC) lehetővé teszi az alkalmazások számára, hogy más alkalmazások által biztosított funkciókat hívjanak, és hálózatokon keresztül is hívhatók. A Windows RPC megfelel az ISO DCE szabványnak, és támogatja a rendszerek közötti integrációt.
Windows csatlakozók
Az absztrakt kommunikációs felület TCP/IP vagy más hálózati protokollok alapján, és az adatátvitel hálózati kapcsolatokon keresztül zajlik az alsó rétegen.
A megosztott memória egy gyakori adatcsere módszer, amelyet a C/C++ fejlesztők használnak (a Google számos példát talál IPC-re, amelyet Linuxon megosztott memóriával valósítottak meg), ezért a C/C++ fejlesztők gyakran ezt választják kommunikációs csatornáként a Windows platformon.

【Közös memória gyakorlat】
Bár kevesebben használják, a .NET-nek van beépített System.IO.MemoryMappedFiles névtére, nem nehéz játszani a Shared Memory-t, szinte ugyanannyi, mint az operációs fájlok, amíg van tapasztalatod a FileStream-hez kapcsolódó műveletekben, gyorsan kezdhetsz, lásd az MSDN példát, írtam egy mini programgyakorlatot.A hiperlink bejelentkezés látható.

Két programot írtam, a ProcessA-t, hogy 1024 bájtos teret hozzon létre a MemoryMappedFile.CreateNew() segítségével, és gyakoroltam a passzolást és elkapást a másik ProcessB-vel. Mivel 1024 bájt két program osztosul, az első 512-t úgy tervezem, hogy a ProcessA legyen a ProcessB-hez, az utolsó 512-t pedig ProcessB a ProcessA olvasáshoz írva, és a program a CreateViewStream segítségével adja be a kezdő címet és a hosszt, hogy a saját területére mutass. Annak érdekében, hogy elkerüljük az olvasási/írási konfliktusokat, amikor a ProcessA és a ProcessB hozzáfér a MemoryMappedFile-hoz, a Mutex lockot használom, hogy egyszerre csak egy folyamat férjen hozzá a MemoryMappedFile-hez. A tesztfolyamat létrehoz egy MemoryMappedFile-t a ProcessA számára, megírja az üzenet stringjét – > ProcessB olvassa az üzenet stringjét és megírja a válasz szúrót – > ProcessA elolvassa a válasz láncsort, és véget ér.

A ProcessA eljárás a következő:

A ProcessB eljárás a következő:

A teszt sikeres volt!



【Kiegészítő tippek】

1. Hogyan tekinthetem meg a jelenleg engedélyezett Windows-ban engedélyezett MemoryMappedFile-t?

A SystemInternals rendelkezik egy AccessChk eszközzel, amely felsorolja az összes fájlt, mappát, regisztert, objektumot és Windows szolgáltatást, amelyek elérhetők a Windows számára. A MemoryMappedFile egy Windows objektum, és a következő parancsot használhatod az összes objektum felsorolására és archiválására
accesschk -osv > e:\objList.txt
Keresd meg benne a MemoryMappedFile nevét, és ha létezik, akkor egy hasonló rekordot láthatsz, mint az alábbi:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Típus: Szakasz
  Közepes kötelező szint (alapértelmezett) [Írás nélkül]
  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

AccessChk eszköz letöltése:A hiperlink bejelentkezés látható.

2. A MemoryMappedFile előbeállítás engedélyezve van a felhasználó ülésében, és az előbeállítás nem használható különböző ülések között. Például, ha két különböző AppPoolhoz tartozó ASP.NET eltérő végrehajtási identitással rendelkezik, még ha a MemoryMappedFile név ugyanaz is, akkor is egy-egy példány mindegyikből, ezért szükséges megerősíteni, hogy mindkét fél által használt végrehajtási identitás ugyanaz.

3. A különböző végrehajtási identitások közötti kommunikációhoz a MemoryMappedFile "Global\ Filename" néven is használható (megjegyzés: a Global esete más, ráléptem arra a villámcsapásra, amit tévesen írtak, hogy a GLOBAL út érvénytelen), így a végrehajtási identitások között elérhető lehet.
Ugyanakkor meg kell jegyezni, hogy a 0. Session 0-on (Windows Service) kívüli folyamatoknak SeCreateGlobalPrivilege engedélyt kell biztosítaniuk a Global\... MemoryMappedFile。 (MSDN fájl)
A 0. üléshez hivatkozhatsz erre az MVP cikkére a másik oldalon – Penetrating Session 0 Isolation (1) (A hiperlink bejelentkezés látható.Nagyon részletes bevezetője van.

Átadott forrás:A hiperlink bejelentkezés látható.





Előző:Szöges 18 kép statikus erőforrás-betöltési probléma
Következő:Gyors áttekintést kapj a Bootstrap 5 fájltartalom szerkezetéről
 Háziúr| Közzétéve 2024. 08. 10. 21:36:57 |
A .NET/C# programprogramot valósít meg a Mutex és a MemoryMappedFile alapján
https://www.itsvse.com/thread-10808-1-1.html
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com