Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 2494|Odpověď: 1

[Tipy] Dvě nebo tři věci o sdílené paměti

[Kopírovat odkaz]
Zveřejněno 23.07.2024 14:50:48 | | | |
Účastní se přesunu starého systému, kde se sdílená paměť používá ke komunikaci napříč procesy (např. volání Window Service ASP.NET), a je nucen pochopit důležitost této technologie. Nepopulární technologie vývojářů NET, speciální poznámky.

[Co je sdílená paměť?] 】
Existuje termín pro komunikaci mezi procesy, Interprocess Communication (IPC), který má na platformě Windows následující možnosti: Reference:Přihlášení k hypertextovému odkazu je viditelné.

Schránka
Program A vloží obsah do schránky a Program B obsah z něj načítá.
Modelu com
OLE Compound Document umožňuje vložit soubory Word do Excel pracovních listů a Excel lze vyvolat k úpravám dvěma kliknutími.
Kopie dat
Program A odesílá WM_COPYDATA zprávy programu B v dohodnutém formátu
DDE
DDE je komunikační protokol, který umožňuje různým aplikacím vyměňovat data v různých formátech, což lze považovat za rozšíření schránky a může být přenášen nepřetržitě kromě jednorázových přenosů. (Relativně špatný výkon, již nedoporučováno)
Mapování souborů
Mapování souborů označuje simulaci souboru jako části paměti v procesu, kdy více aplikací vyměňuje data prostřednictvím sdíleného mapování souborů, nazývaného Named Shared Memory, což je nejlepší výkon mezi různými IPC metodami, ale musí být zabráněno synchronizačními mechanismy, jako je Mutex.
Poštovní sloty
Jednosměrná komunikace, Mailslot klient odesílá zprávy na Mailslot Server, a zprávy jsou po přečtení serverem smazány, což podporuje přenos mezi stroji, a mohou být také vysílány jeden na mnoha. (Délka vysílané zprávy je omezena na 400 bajtů a délku zprávy určuje Mailslot Server při jejím nastavení pro přenos jeden na jednoho)
Dudy
Obousměrný přenos se dělí na anonymní trubku a pojmenovanou trubku. Anonymous Pipe se obecně používá pro standardní orientaci vstupu/výstupu mezi rodičovským programem a podřízeným programem a pro obousměrnou komunikaci, která nemůže být přes síť a je omezena na procesy s závislými vztahy, by měly být postaveny dvě pipeline. Named Pipe lze použít k výměně dat mezi jakýmkoli procesem a podpoře přenosu procesů napříč sítí.
RPC
Vzdálené volání procedur (RPC) umožňuje aplikacím volat funkce poskytované jinými aplikacemi a lze je volat napříč sítěmi. Windows RPC splňuje standard ISO DCE a podporuje integraci napříč operačními systémy.
Windows sockety
Abstraktní komunikační rozhraní založené na TCP/IP nebo jiných síťových protokolech a výměna dat probíhá prostřednictvím síťových spojení na spodní vrstvě.
Sdílená paměť je běžná metoda výměny dat používaná vývojáři C/C++ (Google najde mnoho příkladů IPC implementovaných se sdílenou pamětí na Linuxu), proto ji vývojáři C/C++ často volí jako komunikační kanál na platformě Windows.

【Praktické cvičení sdílené paměti】
Ačkoliv ho používá méně lidí, .NET má vestavěný jmenný prostor System.IO.MemoryMappedFiles, není těžké hrát Shared Memory, téměř stejně jako operační soubory, pokud máte zkušenosti s operacemi souvisejícími s FileStream, můžete začít rychle, viz příklad MSDN, napsal jsem mini programové cvičení.Přihlášení k hypertextovému odkazu je viditelné.

Napsal jsem dva programy, ProcessA, který vytvořil prostor o velikosti 1024 bajtů pomocí MemoryMappedFile.CreateNew() a procvičoval předávání a chytání s druhým ProcessB. Protože 1024 bajtů sdílí dva programy, plánuji, že prvních 512 bude ProcessA zapsaných do ProcessB a posledních 512 bude ProcessB napsaných do ProcessA čtení, a program použije CreateViewStream k předání startovací adresy a délky do své vlastní oblasti. Abych předešel konfliktům při čtení a zápisu, když ProcessA a ProcessB přistupují k MemoryMappedFile, používám Mutex lock k kontrole, že pouze jeden proces může mít přístup k MemoryMappedFile najednou. Testovací proces vytvoří MemoryMappedFile pro ProcesA, zapíše řetězec zprávy – > ProcesB, který přečte a zapíše řetězec odpovědi – > ProcesA přečte řetězec odpovědi a ukončí to.

Postup ProcessA je následující:

Postup ProcessB je následující:

Test byl úspěšný!



【Doplňkové tipy】

1. Jak si zobrazím MemoryMappedFile, který je aktuálně povolený ve Windows?

SystemInternals má nástroj AccessChk, který uvádí všechny soubory, složky, registry, objekty a služby Windows přístupné pro Windows. MemoryMappedFile je objekt pro Windows a můžete použít následující příkaz k vyjmenování všech objektů a jejich archivaci
accesschk -osv > e:\objList.txt
Vyhledejte v něm název MemoryMappedFile a pokud existuje, můžete vidět záznam podobný následujícímu:
\Sessions\1\BaseNamedObjects\DARKTHREAD
  Typ: Sekce
  Střední povinná úroveň (výchozí) [Bez zápisu]
  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

Stažení nástroje AccessChk:Přihlášení k hypertextovému odkazu je viditelné.

2. Přednastavení MemoryMappedFile je v uživatelově relaci povoleno a nelze jej používat napříč relacemi. Například pokud mají dvě ASP.NET patřící do různých AppPoolů různé vykonávací identity, i když je název MemoryMappedFile stejný, stále jde o jednu kopii každého z nich, takže je nutné ověřit, že vykonávací identita používaná oběma stranami je stejná.

3. Pro komunikaci přes různé execution identity může být MemoryMappedFile pojmenován "Global\ Filename" (poznámka: v případě Global je to jiné, šlápl jsem na hrom, který byl omylem napsán jako GLOBAL path is neplatný), takže je možné k němu přistupovat napříč execution identitami.
Je však třeba poznamenat, že procesy jiné než Session 0 (Windows Service) musí mít oprávnění SeCreateGlobalPrivilege k vytvoření Global\... MemoryMappedFile。 (MSDN soubor)
Pro Session 0 se můžete podívat na tento článek od MVP na druhé straně – Penetrating Session 0 Isolation (1) (Přihlášení k hypertextovému odkazu je viditelné.Je v ní velmi podrobný úvod.

Přetištěno z:Přihlášení k hypertextovému odkazu je viditelné.





Předchozí:Problém se statickým načítáním zdrojů na Angular 18
Další:Získejte rychlý přehled struktury obsahu souboru Bootstrap 5
 Pronajímatel| Zveřejněno 10.08.2024 21:36:57 |
.NET/C# implementuje programový singleton založený na Mutex a MemoryMappedFile
https://www.itsvse.com/thread-10808-1-1.html
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com