Kommunikation mellan processer
Windows-operativsystemet tillhandahåller mekanismer för att underlätta kommunikation och datadelning mellan program. Tillsammans kallas de aktiviteter som aktiveras av dessa mekanismer interprocesskommunikation (IPC). Vissa former av IPC underlättar arbetsfördelningen mellan flera specialiserade processer. Andra former av IPC underlättar arbetsfördelningen mellan datorer i ett nätverk.
Vanligtvis kan program använda IPC kategoriserat som klienter eller servrar. En klient är ett program eller en process som begär en tjänst från något annat program eller en annan process. En server är ett program eller en process som svarar på en klientbegäran. Många program fungerar som både en klient och en server, beroende på situationen. Ett ordbehandlingsprogram kan till exempel fungera som en klient när man begär en sammanfattningstabell över tillverkningskostnader från ett kalkylbladsprogram som fungerar som en server. Kalkylbladsprogrammet kan i sin tur fungera som en klient när de begär de senaste inventeringsnivåerna från ett automatiserat inventeringskontrollprogram.
När du har bestämt dig för att ditt program ska dra nytta av IPC måste du bestämma vilka av de tillgängliga IPC-metoderna som ska användas. Det är troligt att ett program kommer att använda flera IPC-mekanismer. Svaren på dessa frågor avgör om ett program kan dra nytta av en eller flera IPC-mekanismer.
- Ska programmet kunna kommunicera med andra program som körs på andra datorer i ett nätverk, eller räcker det för att programmet endast ska kunna kommunicera med program på den lokala datorn?
- Ska programmet kunna kommunicera med program som körs på andra datorer som kan köras under olika operativsystem (till exempel 16-bitars Windows eller UNIX)?
- Ska användaren av programmet behöva välja de andra program som programmet kommunicerar med, eller kan programmet implicit hitta sina samarbetande partner?
- Bör programmet kommunicera med många olika program på ett allmänt sätt, till exempel genom att tillåta åtgärder för klipp ut och klistra in med andra program, eller bör dess kommunikationskrav begränsas till en begränsad uppsättning interaktioner med specifika andra program?
- Är prestanda en viktig aspekt av programmet? Alla IPC-mekanismer innehåller en del omkostnader.
- Ska programmet vara ett GUI-program eller ett konsolprogram? Vissa IPC-mekanismer kräver ett GUI-program.
Följande IPC-mekanismer stöds av Windows:
Använda Urklipp för IPC
Urklipp fungerar som en central depå för datadelning mellan program. När en användare utför en klipp ut- eller kopieringsåtgärd i ett program placerar programmet de markerade data i Urklipp i ett eller flera standardformat eller programdefinierade format. Alla andra program kan sedan hämta data från Urklipp och välja från de tillgängliga format som det förstår. Urklipp är ett mycket löst kopplat utbytesmedium, där program bara behöver komma överens om dataformatet. Programmen kan finnas på samma dator eller på olika datorer i ett nätverk.
Nyckelpunkt: Alla program bör ha stöd för Urklipp för de dataformat som de förstår. Till exempel bör en textredigerare eller ordbehandlare åtminstone kunna producera och acceptera Urklippsdata i rent textformat. Mer information finns i Urklipp.
Använda COM för IPC
Program som använder OLE hanterar sammansatta dokument, dvs. dokument som består av data från en mängd olika program. OLE tillhandahåller tjänster som gör det enkelt för program att anropa andra program för dataredigering. En ordbehandlare som använder OLE kan till exempel bädda in ett diagram från ett kalkylblad. Användaren kan starta kalkylbladet automatiskt inifrån ordbehandlaren genom att välja det inbäddade diagrammet för redigering. OLE tar hand om att starta kalkylbladet och presentera grafen för redigering. När användaren avslutar kalkylbladet uppdateras grafen i det ursprungliga ordbehandlingsdokumentet. Kalkylbladet verkar vara en förlängning av ordbehandlaren.
Grunden för OLE är komponentobjektmodellen (COM). En programvarukomponent som använder COM kan kommunicera med en mängd andra komponenter, även de som ännu inte har skrivits. Komponenterna interagerar som objekt och klienter. Distribuerad COM utökar COM-programmeringsmodellen så att den fungerar i ett nätverk.
nyckelpunkt: OLE stöder sammansatta dokument och gör det möjligt för ett program att inkludera inbäddade eller länkade data som automatiskt startar ett annat program för dataredigering när det väljs. På så sätt kan programmet utökas av alla andra program som använder OLE. COM-objekt ger åtkomst till ett objekts data via en eller flera uppsättningar relaterade funktioner, så kallade gränssnitt. Mer information finns i COM- och ActiveX Object Services.
Använda datakopiering för IPC
Med datakopiering kan ett program skicka information till ett annat program med hjälp av meddelandet WM_COPYDATA. Den här metoden kräver samarbete mellan det sändande programmet och det mottagande programmet. Det mottagande programmet måste känna till informationens format och kunna identifiera avsändaren. Det sändande programmet kan inte ändra det minne som refereras av några pekare.
nyckelpunkt: Datakopiering kan användas för att snabbt skicka information till ett annat program med hjälp av Windows-meddelanden. Mer information finns i Data Copy.
Använda DDE för IPC
DDE är ett protokoll som gör det möjligt för program att utbyta data i olika format. Program kan använda DDE för engångsdatautbyten eller för pågående utbyten där programmen uppdaterar varandra när nya data blir tillgängliga.
De dataformat som används av DDE är desamma som de som används av Urklipp. DDE kan ses som en förlängning av Urklippsmekanismen. Urklipp används nästan alltid för ett engångssvar på ett användarkommando, till exempel genom att välja kommandot Klistra in från en meny. DDE initieras också vanligtvis av ett användarkommando, men det fortsätter ofta att fungera utan ytterligare användarinteraktion. Du kan också definiera anpassade DDE-dataformat för särskild IPC mellan program med mer nära kopplade kommunikationskrav.
DDE-utbyten kan ske mellan program som körs på samma dator eller på olika datorer i ett nätverk.
nyckelpunkt: DDE är inte lika effektivt som nyare tekniker. Du kan dock fortfarande använda DDE om andra IPC-mekanismer inte är lämpliga eller om du måste ha ett gränssnitt med ett befintligt program som endast stöder DDE. Mer information finns i Dynamic Data Exchange och Dynamic Data Exchange Management Library.
Använda en filmappning för IPC
Filmappning möjliggör en process för att behandla innehållet i en fil som om de vore ett minnesblock i processens adressutrymme. Processen kan använda enkla pekaråtgärder för att undersöka och ändra innehållet i filen. När två eller flera processer har åtkomst till samma filmappning får varje process en pekare till minnet i sitt eget adressutrymme som den kan använda för att läsa eller ändra innehållet i filen. Processerna måste använda ett synkroniseringsobjekt, till exempel en semafor, för att förhindra att data skadas i en miljö med flera uppgifter.
Du kan använda ett specialfall med filmappning för att tillhandahålla med namnet delat minne mellan processer. Om du anger systemväxlingsfilen när du skapar ett filmappningsobjekt behandlas filmappningsobjektet som ett delat minnesblock. Andra processer kan komma åt samma minnesblock genom att öppna samma filmappningsobjekt.
Filmappning är ganska effektivt och tillhandahåller även säkerhetsattribut som stöds av operativsystemet och som kan bidra till att förhindra att obehöriga data skadas. Filmappning kan endast användas mellan processer på en lokal dator. det kan inte användas via ett nätverk.
Nyckelpunkt: Filmappning är ett effektivt sätt för två eller flera processer på samma dator att dela data, men du måste tillhandahålla synkronisering mellan processerna. Mer information finns i Filmappning och synkronisering.
Använda en Mailslot för IPC
Mailslots tillhandahåller enkelriktad kommunikation. Alla processer som skapar en mailslot är en mailslot-server. Andra processer, som kallas mailslot-klienter, skickar meddelanden till mailslot-servern genom att skriva ett meddelande till dess e-postslot. Inkommande meddelanden läggs alltid till i e-postsloten. Mailslot sparar meddelandena tills mailslot-servern har läst dem. En process kan vara både en mailslot-server och en mailslot-klient, så dubbelriktad kommunikation är möjlig med hjälp av flera mailslots.
En mailslot-klient kan skicka ett meddelande till en e-postslot på sin lokala dator, till en e-postslot på en annan dator eller till alla e-postslots med samma namn på alla datorer i en angiven nätverksdomän. Meddelanden som skickas till alla mailslots på en domän kan inte vara längre än 400 byte, medan meddelanden som skickas till en enda e-postplats begränsas endast av den maximala meddelandestorlek som anges av mailslot-servern när den skapade e-postsloten.
nyckelpunkt: Mailslots är ett enkelt sätt för program att skicka och ta emot korta meddelanden. De ger också möjlighet att sända meddelanden över alla datorer i en nätverksdomän. Mer information finns i Mailslots.
Använda pipes för IPC
Det finns två typer av rör för dubbelriktad kommunikation: anonyma rör och namngivna rör. Anonyma rör aktivera relaterade processer för att överföra information till varandra. Vanligtvis används en anonym pipe för att omdirigera standardindata eller utdata för en underordnad process så att den kan utbyta data med sin överordnade process. Om du vill utbyta data i båda riktningarna (dubbelsidig åtgärd) måste du skapa två anonyma rör. Den överordnade processen skriver data till ett rör med hjälp av dess skrivhandtag, medan den underordnade processen läser data från röret med dess läshandtag. På samma sätt skriver den underordnade processen data till det andra röret och den överordnade processen läser från den. Anonyma rör kan inte användas via ett nätverk, och de kan inte heller användas mellan orelaterade processer.
Namngivna rör används för att överföra data mellan processer som inte är relaterade processer och mellan processer på olika datorer. Normalt skapar en namngivn pipe-serverprocess ett namngivet rör med ett välkänt namn eller ett namn som ska kommuniceras till klienterna. En klientprocess med namnet pipe som vet namnet på röret kan öppna den andra änden, med förbehåll för åtkomstbegränsningar som anges av namngivna pipe-serverprocesser. När både servern och klienten har anslutit till röret kan de utbyta data genom att utföra läs- och skrivåtgärder på röret.
nyckelpunkt: Anonyma rör är ett effektivt sätt att omdirigera standardindata eller utdata till underordnade processer på samma dator. Namngivna rör tillhandahåller ett enkelt programmeringsgränssnitt för överföring av data mellan två processer, oavsett om de finns på samma dator eller via ett nätverk. Mer information finns i Pipes.
Använda RPC för IPC
RPC gör det möjligt för program att anropa funktioner via fjärranslutning. Därför gör RPC IPC lika enkelt som att anropa en funktion. RPC fungerar mellan processer på en enda dator eller på olika datorer i ett nätverk.
RPC som tillhandahålls av Windows är kompatibel med Open Software Foundation (OSF) Distributed Computing Environment (DCE). Det innebär att program som använder RPC kan kommunicera med program som körs med andra operativsystem som stöder DCE. RPC stöder automatiskt datakonvertering för att ta hänsyn till olika maskinvaruarkitekturer och för byteordning mellan olika miljöer.
RPC-klienter och -servrar är nära kopplade men har fortfarande höga prestanda. Systemet använder RPC i stor utsträckning för att underlätta en klient-/serverrelation mellan olika delar av operativsystemet.
nyckelpunkt: RPC är ett gränssnitt på funktionsnivå, med stöd för automatisk datakonvertering och för kommunikation med andra operativsystem. Med RPC kan du skapa högpresterande, tätt kopplade distribuerade program. Mer information finns i Microsoft RPC-komponenter.
Använda Windows Sockets för IPC
Windows Sockets är ett protokolloberoende gränssnitt. Den drar nytta av kommunikationsfunktionerna i de underliggande protokollen. I Windows Sockets 2 kan ett sockethandtag användas som filhandtag med standardfil-I/O-funktioner.
Windows Sockets baseras på de socketar som först populariserades av Berkeley Software Distribution (BSD). Ett program som använder Windows Sockets kan kommunicera med annan socketimplementering på andra typer av system. Alla transporttjänstleverantörer stöder dock inte alla tillgängliga alternativ.
nyckelpunkt: Windows Sockets är ett protokolloberoende gränssnitt som kan stödja aktuella och framväxande nätverksfunktioner. Mer information finns i Windows Sockets 2.
Unix-socketfunktionen (AF_UNIX) i Windows
Från och med Windows Insider Build 17063 kan du använda unix socket-adressfamiljen (AF_UNIX) i Windows för att kommunicera mellan Win32-processer. Unix-socketar tillåter kommunikation mellan processer (IPC) mellan processer på samma dator. Mer information finns i blogginlägget AF_UNIX kommer till Windows.
Utfasningen av Remote Mailslot-protokollet
Från och med Windows 11 Insider Preview Build 25314 och Windows Server Preview Build 25314 har vi börjat inaktivera Remote Mailslot-protokollet som standard. Detta är en föregångare till utfasning och eventuell borttagning från Windows. Mer information finns i blogginlägget Början av slutet av Remote Mailslots som en del av Windows Insider.