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é

Závislé na platformě nebo na API programovacího jazyka

Tabulka IPC metod

MetodaPoskytuje (operační systém nebo jiné prostředí)
SouborVšechny operační systémy.
SignálVě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.
SoketVětšina operačních systémů.
RouraVšechny POSIXové systémy.
Pojmenovaná rouraVšechny POSIXové systémy.
SemaforVš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ávVětšina operačních systémů.
E-mailová schránkaNě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

Externí odkazy