GNU/Linux >> Znalost Linux >  >> Linux

Doporučení pro meziprocesovou komunikaci

D-Bus je docela užitečný a velmi stabilní pro práci s ipc na stejném hostiteli. http://www.freedesktop.org/wiki/Software/dbus


Jak jste viděli, pro komunikaci mezi procesy můžete použít:

  • Sdílená paměť
  • Pojmenované kanály
  • Sokety TCP/UDP (eventuálně místní)

Sdílená paměť má výhodu výkonu, protože při odesílání/příjmu zpráv nemáte žádnou vyrovnávací paměť. Musíte však synchronizovat výměnu dat s jiným IPC. Mohou to být semafory IPC nebo ... pojmenované roury nebo zásuvky.

Když výkon není hlavním cílem, dávám přednost socketům, protože jejich použití je jednoduché a lze je rozšířit na mezipočítačovou komunikaci.

Nejlepším způsobem je abstrahovat vaši komunikaci s třídou, která může používat sdílenou paměť, když jsou dva procesy na stejném počítači a sokety, pokud ne. Pak si musíte vybrat mezi UDP a TCP;-)

Pro synchronizaci / výměnu vyrovnávací paměti preferujte protokol TCP, protože je spolehlivější.

Nepoužívám pojmenované pipes, protože preferuji socket pro možnost využití mezipočítačové komunikace a samozřejmě můžete najít spoustu portable socket knihoven...

my2cents

EDIT:

Pro synchronizaci možná sdílená paměť není nejlepším nástrojem. Ve vašem případě jej lze použít sdílením malého paměťového prostoru s prostorem pro každý proces, který čeká na příkazy. Můžete se buď dotazovat na jakýkoli příchozí příkaz, nebo použít sdílený semafor. Nejrychlejším způsobem jsou vaše procesy čekající na pojmenované semafory a čtení sdíleného mem prostoru pro jejich příkazy/parametry. Použití pojmenovaných rour je jistě jednodušší, ale ne tak rychlé. Určitě nemusíte být tak rychlí? Každopádně abstrahujte to ve třídě, která modeluje váš protokol výměny a vyzkoušejte dva způsoby :-)


Dobrou volbou je použití socketpair, velmi rychlé a efektivní.


Boost má pěknou knihovnu InterProcess, která je multiplatformní a docela intuitivní.

I když jsem si s tím jen hrál, takže možná existují lepší alternativy.

Pokud však sdílenou paměť opravdu nepotřebujete, zůstal bych u přístupu zasílání zpráv. Vyhnete se patovým situacím a závodním podmínkám. Princip potrubí je opravdu skvělý a dokonce umožňuje líné chování, což vám může ušetřit spoustu zpracování v závislosti na dané záležitosti!


Linux
  1. Správa paměti Linuxu – odkládání, mezipaměti a sdílené virtuální počítače

  2. Příklady příkazů ipcs v Linuxu

  3. Uzamykací mechanismy pro konzistenci sdílené paměti

  1. Jak vypsat seznam procesů připojených k segmentu sdílené paměti v linuxu?

  2. Jak používat sdílenou paměť s Linuxem v C

  3. Přidělování a přidělování paměti přes hranice sdílené knihovny

  1. Meziprocesová komunikace v Linuxu:Sokety a signály

  2. Meziprocesová komunikace v Linuxu:Použití kanálů a front zpráv

  3. Proč je sdílená paměť jádra na Ubuntu 12.04 0?