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 editovat

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í editovat

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 editovat

Platformně nezávislé editovat

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

Tabulka IPC metod editovat

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 editovat

V tomto článku byl použit překlad textu z článku Inter-process communication na anglické Wikipedii.

Související články editovat

Externí odkazy editovat