Sdílet prostřednictvím


Komunikace mezi procesy

Operační systém Windows poskytuje mechanismy pro usnadnění komunikace a sdílení dat mezi aplikacemi. Souhrnně se aktivity povolené těmito mechanismy nazývají komunikace mezi procesy (IPC). Některé formy IPC usnadňují rozdělení práce mezi několik specializovaných procesů. Další formy IPC usnadňují rozdělení práce mezi počítači v síti.

Aplikace můžou obvykle používat IPC zařazené do kategorií jako klienti nebo servery. Klient je aplikace nebo proces, který požaduje službu z jiné aplikace nebo procesu. server je aplikace nebo proces, který reaguje na požadavek klienta. Mnoho aplikací funguje jako klient i server v závislosti na situaci. Aplikace pro zpracování textu může například fungovat jako klient při vyžádání souhrnné tabulky výrobních nákladů z tabulkové aplikace fungující jako server. Tabulkové aplikace zase může fungovat jako klient při vyžádání nejnovějších úrovní inventáře z aplikace automatizovaného řízení inventáře.

Jakmile se rozhodnete, že vaše aplikace bude těžit z IPC, musíte rozhodnout, které z dostupných metod IPC použít. Je pravděpodobné, že aplikace bude používat několik mechanismů IPC. Odpovědi na tyto otázky určují, jestli může aplikace využívat jeden nebo více mechanismů IPC.

  • Měla by aplikace komunikovat s jinými aplikacemi běžícími na jiných počítačích v síti, nebo je dostačující, aby aplikace komunikuje pouze s aplikacemi na místním počítači?
  • Měla by aplikace komunikovat s aplikacemi běžícími na jiných počítačích, které můžou běžet v různých operačních systémech (jako je 16bitová verze Windows nebo UNIX)?
  • Má uživatel aplikace zvolit jiné aplikace, se kterými aplikace komunikuje, nebo může aplikace implicitně najít své spolupracující partnery?
  • Měla by aplikace obecně komunikovat s mnoha různými aplikacemi, jako je povolení operací vyjmutí a vložení s jakoukoli jinou aplikací, nebo by její komunikační požadavky měly být omezené na omezenou sadu interakcí s konkrétními jinými aplikacemi?
  • Je výkon důležitým aspektem aplikace? Všechny mechanismy IPC zahrnují určitou režii.
  • Má se jednat o aplikaci grafického uživatelského rozhraní nebo konzolovou aplikaci? Některé mechanismy IPC vyžadují aplikaci grafického uživatelského rozhraní.

Windows podporuje následující mechanismy IPC:

Použití schránky pro IPC

Schránka funguje jako centrální depozitář pro sdílení dat mezi aplikacemi. Když uživatel provede operaci vyjmutí nebo kopírování v aplikaci, aplikace umístí vybraná data do schránky v jednom nebo více standardních nebo aplikačních formátech. Jakákoli jiná aplikace pak může načíst data ze schránky a vybrat si z dostupných formátů, kterým rozumí. Schránka je velmi volně svázané exchange médium, kde aplikace potřebují souhlas pouze s datovým formátem. Aplikace se můžou nacházet ve stejném počítači nebo v různých počítačích v síti.

klíčový bod: Všechny aplikace by měly podporovat schránku pro formáty dat, kterým rozumí. Například textový editor nebo textový procesor by měl mít alespoň možnost vytvářet a přijímat data schránky v čistém textovém formátu. Další informace naleznete v tématu schránka.

Použití modelu COM pro IPC

Aplikace využívající OLE spravují složené dokumenty– to znamená dokumenty tvořené daty z různých aplikací. OLE poskytuje služby, které usnadňují aplikacím volání jiných aplikací pro úpravy dat. Například textový procesor, který používá OLE, může vložit graf z tabulky. Uživatel může tabulku spustit automaticky z textového procesoru tak, že zvolí vložený graf pro úpravy. OLE se postará o spuštění tabulky a prezentaci grafu pro úpravy. Když uživatel tabulku ukončí, graf se aktualizuje v původním dokumentu textového procesoru. Zdá se, že tabulka je rozšířením textového procesoru.

Základem OLE je model COM (Component Object Model). Softwarová komponenta, která používá com, může komunikovat s širokou škálou dalších komponent, i s těmi, které ještě nebyly napsány. Komponenty interagují jako objekty a klienty. Distribuovaný model COM rozšiřuje programovací model modelu COM tak, aby fungoval v síti.

klíčový bod: OLE podporuje složené dokumenty a umožňuje aplikaci zahrnout vložená nebo propojená data, která při výběru automaticky spustí jinou aplikaci pro úpravy dat. To umožňuje aplikaci rozšířit jakoukoli jinou aplikací, která používá OLE. Objekty COM poskytují přístup k datům objektu prostřednictvím jedné nebo více sad souvisejících funkcí, označovaných jako rozhraní. Další informace naleznete v tématu COM a ActiveX Object Services.

Použití kopírování dat pro IPC

Kopírování dat umožňuje aplikaci odesílat informace do jiné aplikace pomocí zprávy WM_COPYDATA. Tato metoda vyžaduje spolupráci mezi odesílající aplikací a přijímající aplikací. Přijímající aplikace musí znát formát informací a být schopen identifikovat odesílatele. Odesílající aplikace nemůže upravit paměť, na kterou odkazují žádné ukazatele.

klíčový bod: kopírování dat lze použít k rychlému odesílání informací do jiné aplikace pomocí zasílání zpráv systému Windows. Další informace naleznete v tématu kopírování dat.

Použití DDE pro IPC

DDE je protokol, který umožňuje aplikacím vyměňovat data v různých formátech. Aplikace můžou používat DDE pro jednorázové výměny dat nebo pro průběžné výměny, ve kterých se aplikace aktualizují navzájem, jakmile budou k dispozici nová data.

Formáty dat používané DDE jsou stejné jako formáty, které používá schránka. DDE si lze představit jako rozšíření mechanismu schránky. Schránka se téměř vždy používá pro jednorázovou odezvu na uživatelský příkaz, například pro výběr příkazu Vložit z nabídky. DDE je obvykle inicializován také uživatelským příkazem, ale často funguje i bez další interakce uživatele. Můžete také definovat vlastní formáty dat DDE pro speciální IPC mezi aplikacemi s úzce propojenými požadavky na komunikaci.

Výměny DDE mohou nastat mezi aplikacemi běžícími na stejném počítači nebo v různých počítačích v síti.

klíčový bod: DDE není tak efektivní jako novější technologie. DDE však můžete použít i v případě, že jiné mechanismy IPC nejsou vhodné nebo pokud je nutné rozhraní s existující aplikací, která podporuje pouze DDE. Další informace naleznete v tématu Dynamické výměny dat a dynamické knihovny pro správu datové výměny dat.

Použití mapování souborů pro IPC

mapování souborů umožňuje procesu zacházet s obsahem souboru, jako by šlo o blok paměti v adresního prostoru procesu. Proces může použít jednoduché operace ukazatele k prozkoumání a úpravě obsahu souboru. Když dva nebo více procesů přistupují ke stejnému mapování souborů, každý proces obdrží ukazatel na paměť ve vlastním adresního prostoru, který může použít ke čtení nebo úpravě obsahu souboru. Procesy musí používat synchronizační objekt, například semaphore, aby se zabránilo poškození dat v prostředí multitaskingu.

Pomocí speciálního případu mapování souborů můžete poskytnout pojmenovanou sdílenou paměť mezi procesy. Pokud při vytváření objektu mapování souborů zadáte soubor prohození systému, bude objekt mapování souborů považován za blok sdílené paměti. Jiné procesy mají přístup ke stejnému bloku paměti otevřením stejného objektu mapování souborů.

Mapování souborů je poměrně efektivní a také poskytuje atributy zabezpečení podporované operačním systémem, které můžou pomoct zabránit neoprávněnému poškození dat. Mapování souborů lze použít pouze mezi procesy v místním počítači; nelze ho použít přes síť.

klíčový bod: Mapování souborů je efektivní způsob, jak dva nebo více procesů na stejném počítači sdílet data, ale musíte zajistit synchronizaci mezi procesy. Další informace naleznete v tématu mapování souborů a synchronizace.

Použití Mailslotu pro IPC

Mailslots poskytuje jednosměrnou komunikaci. Jakýkoli proces, který vytvoří mailslot, je poštovní server. Jiné procesy, označované jako klienti mailslot, odesílají zprávy na poštovní server napsáním zprávy do svého poštovního dopisu. Příchozí zprávy se vždy připojují k poštovnímu lístku. Mailslot zprávy uloží, dokud je server mailslot nepřečte. Procesem může být jak poštovní server, tak klient mailslot, takže obousměrná komunikace je možná pomocí více poštovních uzlů.

Klient mailslot může odeslat zprávu poštovnímu lístku na místním počítači, do poštovního lístku na jiném počítači nebo všem poštovním uzlům se stejným názvem na všech počítačích v zadané síťové doméně. Zprávy vysílané všem poštovním uzlům v doméně nesmí být delší než 400 bajtů, zatímco zprávy odeslané do jednoho poštovního lístku jsou omezeny pouze maximální velikostí zprávy určenou serverem mailslot při vytvoření poštovního lístku.

klíčový bod: Mailslots nabízí snadný způsob, jak aplikace odesílat a přijímat krátké zprávy. Poskytují také možnost vysílat zprávy napříč všemi počítači v síťové doméně. Další informace naleznete v tématu Mailslots.

Použití kanálů pro IPC

Existují dva typy kanálů pro obousměrnou komunikaci: anonymní kanály a pojmenované kanály. anonymní kanály umožňují související procesy vzájemně přenášet informace. Anonymní kanál se obvykle používá k přesměrování standardního vstupu nebo výstupu podřízeného procesu, aby mohl vyměňovat data s nadřazeným procesem. Pokud chcete vyměňovat data v obou směrech (duplexní operace), musíte vytvořit dva anonymní kanály. Nadřazený proces zapisuje data do jednoho kanálu pomocí jeho popisovače zápisu, zatímco podřízený proces čte data z daného kanálu pomocí jeho popisovače pro čtení. Podobně podřízený proces zapisuje data do druhého kanálu a nadřazený proces z něj čte. Anonymní kanály nelze použít přes síť, ani je nelze použít mezi nesouvisejícími procesy.

pojmenované kanály slouží k přenosu dat mezi procesy, které nesouvisejí s procesy a mezi procesy v různých počítačích. Proces pojmenovaného serveru obvykle vytvoří pojmenovaný kanál s dobře známým názvem nebo názvem, který se má sdělit svým klientům. Proces klienta pojmenovaného kanálu, který zná název kanálu, může otevřít jeho druhý konec, s výhradou omezení přístupu určených procesem pojmenovaného serveru. Jakmile se server i klient připojí k kanálu, mohou vyměňovat data provedením operací čtení a zápisu na kanálu.

klíčový bod: anonymní kanály poskytují efektivní způsob přesměrování standardního vstupu nebo výstupu do podřízených procesů na stejném počítači. Pojmenované kanály poskytují jednoduché programovací rozhraní pro přenos dat mezi dvěma procesy, ať už jsou umístěné ve stejném počítači nebo v síti. Další informace naleznete v tématu Kanály.

Použití RPC pro IPC

RPC umožňuje aplikacím vzdáleně volat funkce. Rpc proto usnadňuje volání funkce IPC. RPC funguje mezi procesy na jednom počítači nebo v různých počítačích v síti.

Rpc poskytovaný Systémem Windows je kompatibilní s prostředím DCE (Open Software Foundation) Distributed Computing Environment (DCE). To znamená, že aplikace, které používají RPC, můžou komunikovat s aplikacemi běžícími s jinými operačními systémy, které podporují DCE. RPC automaticky podporuje převod dat pro různé hardwarové architektury a pro řazení bajtů mezi odlišnými prostředími.

Klienti a servery RPC jsou úzce svázaní, ale stále udržují vysoký výkon. Systém značně využívá RPC k usnadnění vztahu mezi klientem a serverem mezi různými částmi operačního systému.

klíčový bod: RPC je rozhraní na úrovni funkce s podporou automatického převodu dat a komunikace s jinými operačními systémy. Pomocí RPC můžete vytvářet vysoce výkonné úzce propojené distribuované aplikace. Další informace naleznete v tématu součásti rpc součásti.

Použití rozhraní Windows Sockets pro IPC

Windows Sockets je rozhraní nezávislé na protokolu. Využívá možnosti komunikace základních protokolů. V systému Windows Sockets 2 lze popisovač soketu volitelně použít jako popisovač souborů se standardními vstupně-výstupními funkcemi souborů.

Rozhraní Windows Sockets jsou založeny na soketech, které byly poprvé populární v Berkeley Software Distribution (BSD). Aplikace, která používá rozhraní Windows Sockets, může komunikovat s jinými implementacemi soketů v jiných typech systémů. Ne všichni poskytovatelé přepravních služeb ale podporují všechny dostupné možnosti.

klíčový bod: Windows Sockets je rozhraní nezávislé na protokolu, které podporuje současné a nově vznikající síťové funkce. Další informace naleznete v tématu Windows Sockets 2.

Funkce unixového soketu (AF_UNIX) ve Windows

Počínaje buildem Windows Insider 17063 můžete ke komunikaci mezi procesy Win32 používat řadu adres unixových soketů (AF_UNIX). Unixové sokety umožňují komunikaci mezi procesy na stejném počítači. Další informace najdete v blogovém příspěvku AF_UNIX přichází do Windows.

Vyřazení protokolu Remote Mailslot

Od verze Windows 11 Insider Preview build 25314 a Windows Server Preview Build 25314 jsme ve výchozím nastavení začali zakazovat protokol Remote Mailslot. Jedná se o prekurzor vyřazení a případné odebrání ze systému Windows. Další informace najdete v blogovém příspěvku začátek konce vzdálené pošty jako součást programu Windows Insider.