Meziprocesová komunikace
Meziprocesová komunikace (anglicky Inter-Process Communication, IPC) je v informatice sada technik pro výměnu dat mezi dvěma nebo více procesy nebo thready. Komunikace může probíhat i mezi různými počítači propojenými počítačovou sítí. IPC může být též označována jako mezithreadová komunikace (anglicky inter-thread communication) a meziaplikační komunikace (anglicky inter-application communication).
IPC techniky můžeme rozdělit na metody pro zasílání zpráv, synchronizace, sdílená paměť a vzdálené volání procedur (RPC). Metoda použitá pro IPC může záviset na datové propustnosti, latenci komunikace mezi thready a typem dat, která je potřeba přenášet a podobně.
Implementace
Různé metody meziprocesové komunikace mohou být implementovány buď přímo jádrem operačního systému nebo pomocí knihovních funkcí, které navenek používají jinou metodu, než je použita pro vlastní implementaci (pro vlastní implementaci je typicky používána sdílená paměť).
Programátor používá při programování API (aplikační rozhraní), které může být standardizováno (např. POSIX, Single UNIX Specification), může být určeno příslušnou platformou (Windows API, D-Bus), ale může mít i zcela volné či jednoúčelové rozhraní.
Příklady využití
Ve výpočetně náročných úlohách je vhodné využít všechna jádra a mikroprocesory počítače, někdy umístěné dokonce ve více počítačích (viz počítačový cluster). Proto je vhodné využít multitasking (multiprogramování), kdy výpočet řeší najednou více procesů či vláken (threadů). Je nevýhodné, aby práce byla rozdělena hned na začátku výpočtu, protože není zřejmé, kolik dat bude jednotlivými výpočty nakonec zpracováno. Proto je pomocí meziprocesové komunikace zajišťována komunikace mezi mateřským procesem, který práci rozděluje a podřízenými procesy, které obstarávají vlastní výpočty. Jakmile podřízený proces zpracuje přidělená data, může požádat o přidělení dalších dat ke zpracování.
Apache HTTP Server obsluhuje typicky mnoho požadavků webových prohlížečů najednou. Naprogramován je jako víceprocesová aplikace, kdy rodičovský proces naslouchá na síťovém portu a při příchodu požadavku odštěpí potomka, který převezme obsluhu webového klienta a vyřízení jeho požadavku. Tento model významně zjednodušuje programování, protože programátor nemusí řešit obsluhu více různě rychlých klientů zároveň. Zároveň však není vhodné, aby rodičovský proces vytvářel potomka až ve chvíli, kdy přijde požadavek, protože vytvoření potomka je časově a výpočetně poměrně náročná úloha (viz fork (systémové volání)). Proto jsou potomci vytvořeni ve vhodném množství (anglicky Thread Pool) ihned při startu rodičovského procesu a ten jim pomocí meziprocesové komunikace průběžně přiděluje úkoly.
Rozdělení meziprocesové komunikace
Platformně nezávislé
- anonymní roura a pojmenovaná roura
- Common Object Request Broker Architecture (CORBA)
- D-Bus z Freedesktop.org
- Distributed Computing Environment (DCE)
- Message Bus (MBUS) (specifikováno v RFC 3259)
- ONC RPC
- Socket
- XML XML-RPC nebo SOAP
- TIPC
- Internet Communications Engine od ZeroC (ICE)
Závislé na platformě nebo na API programovacího jazyka
- Apple events od Apple Inc. (dříve známé jako Interapplication Communications (IAC))
- Desktop Communications Protocol z KDE (DCOP)
- Libt2n pro C++ (jen pro Linux, pracuje s komplexními objekty a výjimkami
- jádro systému Mach (jádro)
- Microsoft: ActiveX, Component Object Model (COM), Microsoft Transaction Server (COM+), Distributed Component Object Model (DCOM), Dynamic Data Exchange (DDE), Object Linking and Embedding (OLE), anonymní roura, pojmenovaná roura, Local Procedure Call, Message loop, MSRPC, .NET Remoting a Windows Communication Foundation
- SPX od Novellu
- POSIX: mmap, fronty zpráv, semafory a sdílená paměť
- zprávy v RISC OS
- Doors ze Solarisu
- UNIX System V: fronty zpráv, semafory a sdílená paměť
- Distributed Ruby
- Distributed Inter-Process Communication (DIPC)
Tabulka IPC metod
Metoda | Poskytuje (operační systém nebo jiné prostředí) |
---|---|
Soubor | Všechny operační systémy. |
Signál | Většina operačních systémů; některé systémy (např. Microsoft Windows) implementují signály jen v běhové knihovně jazyka C a v současné době nepodporují jejich použití jako IPC techniku. |
Soket | Většina operačních systémů. |
Roura | Všechny POSIXové systémy. |
Pojmenovaná roura | Všechny POSIXové systémy. |
Semafor | Všechny POSIXové systémy. |
Sdílená paměť | Všechny POSIXové systémy. |
Zasílání zpráv (bez sdílení) | Použito v MPI paradigma, Java RMI, CORBA a další. |
mmap (paměťově mapovaný soubor) | Všechny POSIXové systémy; může způsobit race condition, pokud je použit dočasný soubor, Microsoft Windows též podporuje, ale API je odlišné. |
Fronta zpráv | Většina operačních systémů. |
E-mailová schránka | Některé operační systémy. |
Reference
V tomto článku byl použit překlad textu z článku Inter-process communication na anglické Wikipedii.
Související články
- Mikrojádro
- Nanojádro
Externí odkazy
- Ukázky meziprocesové komunikace v systému UNIX (anglicky)
- Linux System V IPC Main Page (anglicky)