Deltagelse i flytning af et gammelt system, hvor delt hukommelse bruges til at kommunikere på tværs af processer (f.eks. kalde Window Service ASP.NET), og tvinges til at forstå vigtigheden af denne teknologi. NET-udvikleres upopulære teknologi, særlige bemærkninger.
[Hvad er delt hukommelse?] 】 Der findes et udtryk for tværproceskommunikation, Interprocess Communictaion (IPC), som har følgende muligheder på Windows-platformen: Reference:Hyperlink-login er synlig.
Udklipsholder Program A indsætter indholdet i udklipsholderen, og Program B henter indholdet fra udklipsholderen. COM OLE Compound Document tillader Word-filer at blive indlejret i Excel-arbejdsark, og Excel kan åbnes til redigering med to klik. Datakopi Program A sender WM_COPYDATA beskeder til Program B i det aftalte format DDE DDE er en kommunikationsprotokol, der tillader forskellige applikationer at udveksle data i forskellige formater, hvilket kan betragtes som en udvidelse af udklipsholderen og kan overføres kontinuerligt ud over engangsoverførsler. (Relativt dårlig ydeevne, ikke længere anbefalet) Filkortlægning Filmapping refererer til simulering af en fil som et stykke hukommelse i en proces, når flere applikationer udveksler data gennem delt filmapping, kaldet Named Shared Memory, hvilket er den bedste ydelse blandt forskellige IPC-metoder, men skal forhindres af synkroniseringsmekanismer som Mutex. Postslots Envejskommunikation, Mailslot-klienten sender beskeder til Mailslot Server, og beskederne slettes efter at være blevet læst af serveren, hvilket understøtter overførsel på tværs af maskiner og kan også sendes én-til-mange. (Længden af broadcast-beskeden er begrænset til 400 bytes, og længden af beskeden bestemmes af Mailslot-serveren, når den etableres til én-til-én transmission) Rør Tovejstransmission er opdelt i Anonym Pipe og Named Pipe. Anonymous Pipe bruges generelt til den standard input/output-orientering mellem forældreprogrammet og underprogrammet, og to pipes bør bygges til tovejskommunikation, som ikke kan være på tværs af netværket og er begrænset til processer med afhængige relationer. Named Pipe kan bruges til at udveksle data mellem enhver proces og understøtte overførsel på tværs af netværk. RPC Remote Procedure Call (RPC) gør det muligt for applikationer at kalde funktioner leveret af andre applikationer og kan kaldes på tværs af netværk. Windows RPC overholder ISO DCE-standarden og understøtter integration på tværs af operativsystemer. Windows sockets Abstrakt kommunikationsgrænseflade baseret på TCP/IP eller andre netværksprotokoller, og dataudveksling foregår via netværksforbindelser i bundlaget. Shared Memory er en almindelig dataudvekslingsmetode, der bruges af C/C++-udviklere (Google kan finde mange eksempler på IPC implementeret med Shared Memory på Linux), så C/C++-udviklere vælger det ofte som kommunikationskanal på Windows-platformen.
【Delt hukommelse Praktisk Øvelse】 Selvom der er færre, der bruger det, har .NET et indbygget System.IO.MemoryMappedFiles-navnerum, det er ikke svært at spille Shared Memory, næsten som at styre filer, så længe du har erfaring med FileStream-relaterede operationer, kan du komme hurtigt i gang, se MSDN-eksemplet, jeg skrev en mini-programøvelse.Hyperlink-login er synlig.
Jeg skrev to programmer, ProcessA, for at skabe et rum på 1024 bytes med MemoryMappedFile.CreateNew() og øve passing and catching med den anden ProcessB. Da 1024 bytes deles af to programmer, planlægger jeg, at de første 512 skal være ProcessA-skrevet til ProcessB, og de sidste 512 skal være ProcessB-skrevet til ProcessA-læsning, og programmet bruger CreateViewStream til at sende startadresse og længde for at pege på sit eget område. For at undgå læse-/skrivekonflikter, når ProcessA og ProcessB tilgår MemoryMappedFile, bruger jeg Mutex lock til at kontrollere, at kun én proces kan tilgå MemoryMappedFile ad gangen. Testprocessen opretter en MemoryMappedFile for ProcessA, skriver beskedstrengen – > ProcessB læser beskedstrengen og skriver svarstrengen – > ProcessA læser svarstrengen og afslutter.
ProcessA-proceduren er som følger:
ProcessB-proceduren er som følger:
Testen var en succes!
【Supplerende tips】
1. Hvordan ser jeg MemoryMappedFile, der aktuelt er aktiveret i Windows?
SystemInternals har et AccessChk-værktøj, der lister alle filer, mapper, registre, objekter og Windows-tjenester, der er tilgængelige for Windows. MemoryMappedFile er et Windows-objekt, og du kan bruge følgende kommando til at liste alle objekter og arkivere dem accesschk -osv > e:\objList.txt Søg efter navnet på MemoryMappedFile i den, og hvis det findes, kan du se en post, der ligner følgende: \Sessions\1\BaseNamedObjects\DARKTHREAD Type: Sektion Mellemniveau obligatorisk (Standard) [Ingen advarsel] RW NT AUTHORITY\SYSTEM SECTION_ALL_ACCESS RW DOMAIN\Brugernavn SECTION_ALL_ACCESS RW DOMAIN\Brugernavn-S-1-5-5-0-954410 SECTION_ALL_ACCESS
Download af AccessChk-værktøjet:Hyperlink-login er synlig.
2. MemoryMappedFile-forudindstillingen er aktiveret i brugerens session, og forudindstillingen kan ikke bruges på tværs af sessioner. For eksempel, hvis to ASP.NET tilhørende forskellige AppPools har forskellige eksekveringsidentiteter, er det stadig én kopi af hver, selvom MemoryMappedFil-navnet er det samme, så det er nødvendigt at bekræfte, at eksekveringsidentiteten brugt af begge parter er den samme.
3. For at kommunikere på tværs af forskellige eksekveringsidentiteter kan MemoryMappedFile hedde "Global\ Filename" (bemærk at tilfældet med Global er anderledes, jeg trådte på tordenvejret, der fejlagtigt blev skrevet som GLOBAL path er ugyldig), så den kan tilgås på tværs af eksekveringsidentiteter. Det skal dog bemærkes, at processer andre end Session 0 (Windows Service) skal have SeCreateGlobalPrivilege-tilladelsen for at oprette en Global\... MemoryMappedFile。 (MSDN-fil) For Session 0 kan du henvise til denne artikel af MVP på den anden side - Penetrating Session 0 Isolation (1) (Hyperlink-login er synlig.Der er en meget detaljeret introduktion i den.
Genoptrykt fra:Hyperlink-login er synlig.
|