Å delta i flyttingen av et gammelt system, hvor delt minne brukes til å kommunisere på tvers av prosesser (f.eks. å kalle vindustjenesten ASP.NET), og tvinges til å forstå viktigheten av denne teknologien. NET-utvikleres upopulære teknologi, spesielle notater.
[Hva er delt minne?] 】 Det finnes et begrep for tverrprosesskommunikasjon, Interprocess Communictaion (IPC), som har følgende alternativer på Windows-plattformen: Referanse:Innloggingen med hyperkoblingen er synlig.
Utklippstavle Program A limer inn innholdet i utklippstavlen, og Program B henter innholdet fra utklippstavlen. COM OLE Compound Document gjør det mulig å legge inn Word-filer i Excel-ark, og Excel kan åpnes for redigering med to klikk. Datakopi Program A sender WM_COPYDATA meldinger til Program B i det avtalte formatet DDE DDE er en kommunikasjonsprotokoll som tillater ulike applikasjoner å utveksle data i forskjellige formater, noe som kan betraktes som en utvidelse av utklippstavlen, og kan overføres kontinuerlig i tillegg til engangsoverføringer. (Relativt dårlig ytelse, anbefales ikke lenger) Filkartlegging Filkartlegging refererer til å simulere en fil som et minnestykke i en prosess, når flere applikasjoner utveksler data gjennom delt filkartlegging, kalt Named Shared Memory, som gir best ytelse blant ulike IPC-metoder, men må forhindres av synkroniseringsmekanismer som Mutex. Postautomater Enveiskommunikasjon, Mailslot-klienten sender meldinger til Mailslot Server, og meldingene slettes etter å ha blitt lest av serveren, noe som støtter overføring på tvers av maskiner, og kan også kringkastes én-til-mange. (Lengden på sendingsmeldingen er begrenset til 400 byte, og lengden på meldingen bestemmes av Mailslot-serveren når den etableres for én-til-én-overføring) Rør Toveis overføring er delt inn i Anonym Pipe og Named Pipe. Anonymous Pipe brukes vanligvis for standard input/output-orientering mellom foreldreprogrammet og barneprogrammet, og to pipes bør bygges for toveis kommunikasjon, som ikke kan være over nettverket og er begrenset til prosesser med avhengige relasjoner. Named Pipe kan brukes til å utveksle data mellom enhver prosess og støtte prosessoverføring på tvers av nettverk. RPC Remote Procedure Call (RPC) gjør det mulig for applikasjoner å kalle funksjoner levert av andre applikasjoner, og kan kalles på tvers av nettverk. Windows RPC følger ISO DCE-standarden og støtter integrasjon på tvers av operativsystemer. Vindussokler Abstrakt kommunikasjonsgrensesnitt basert på TCP/IP eller andre nettverksprotokoller, og datautveksling skjer via nettverkstilkoblinger på det nederste laget. Delt minne er en vanlig datautvekslingsmetode brukt av C/C++-utviklere (Google kan finne mange eksempler på IPC implementert med delt minne på Linux), så C/C++-utviklere velger det ofte som kommunikasjonskanal på Windows-plattformen.
【Delt minneøvelse】 Selv om det er færre som bruker det, har .NET et innebygd System.IO.MemoryMappedFiles-navnerom, det er ikke vanskelig å spille Shared Memory, nesten som operativsystemer, så lenge du har erfaring med FileStream-relaterte operasjoner, kan du komme i gang raskt, se MSDN-eksempelet, jeg skrev en mini-programøvelse.Innloggingen med hyperkoblingen er synlig.
Jeg skrev to programmer, ProcessA, for å lage et område på 1024 byte med MemoryMappedFile.CreateNew() og øvde på passing and catching med den andre ProcessB. Siden 1024 bytes deles av to programmer, planlegger jeg at de første 512 skal være ProcessA-skrevet til ProcessB, og de siste 512 skal være ProcessB-skrevet til ProcessA-lesning, og programmet bruker CreateViewStream for å sende inn startadresse og lengde for å peke på sitt eget område. For å unngå lese-/skrivekonflikter når ProcessA og ProcessB får tilgang til MemoryMappedFile, bruker jeg Mutex-lås for å kontrollere at bare én prosess kan få tilgang til MemoryMappedFile om gangen. Testprosessen oppretter en MemoryMappedFile for ProcessA, skriver meldingsstrengen – > ProcessB leser meldingsstrengen og skriver svarstrengen – > ProcessA leser svarstrengen, og avslutter.
ProsessA-prosedyren er som følger:
ProsessB-prosedyren er som følger:
Testen var vellykket!
【Supplerende tips】
1. Hvordan ser jeg MemoryMappedFile som for øyeblikket er aktivert i Windows?
SystemInternals har et AccessChk-verktøy som lister opp alle filer, mapper, registre, objekter og Windows-tjenester som er tilgjengelige for Windows. MemoryMappedFile er et Windows-objekt, og du kan bruke følgende kommando for å liste opp alle objekter og arkivere dem accesschk -osv > e:\objList.txt Se etter navnet på MemoryMappedFile i den, og hvis det finnes, kan du se en post som ligner på følgende: \Sessions\1\BaseNamedObjects\DARKTHREAD Type: Seksjon Middels obligatorisk nivå (Standard) [Ingen advarsel] RW NT AUTHORITY\SYSTEM SECTION_ALL_ACCESS RW DOMAIN\Brukernavn SECTION_ALL_ACCESS RW DOMAIN\Brukernavn-S-1-5-5-0-954410 SECTION_ALL_ACCESS
Nedlasting av AccessChk-verktøyet:Innloggingen med hyperkoblingen er synlig.
2. MemoryMappedFile-forhåndsinnstillingen er aktivert i brukerens sesjon, og forhåndsinnstillingen kan ikke brukes på tvers av økter. For eksempel, hvis to ASP.NET som tilhører forskjellige AppPools har forskjellige utførelsesidentiteter, selv om MemoryMappedFil-navnet er det samme, er det fortsatt én kopi av hver, så det er nødvendig å bekrefte at utførelsesidentiteten som brukes av begge parter er den samme.
3. For å kommunisere på tvers av ulike utførelsesidentiteter kan MemoryMappedFile kalles "Global\ Filename" (merk at tilfellet Global er annerledes, jeg tråkket på tordenen som feilaktig ble skrevet som GLOBAL path er ugyldig), slik at den kan nås på tvers av utførelsesidentiteter. Det bør imidlertid bemerkes at prosesser andre enn Session 0 (Windows Service) må ha tillatelsen SeCreateGlobalPrivilege for å opprette en Global\... MemoryMappedFile。 (MSDN-fil) For Session 0 kan du se denne artikkelen av MVP på den andre siden – Penetrating Session 0 Isolation (1) (Innloggingen med hyperkoblingen er synlig.Det er en veldig detaljert introduksjon i den.
Gjengitt fra:Innloggingen med hyperkoblingen er synlig.
|