GNU/Linux >> Tutoriales Linux >  >> Linux

Recomendación de comunicación entre procesos

D-Bus es bastante útil y muy estable para hacer ipc en el mismo host.http://www.freedesktop.org/wiki/Software/dbus


Como ha visto, puede usar para la comunicación entre procesos:

  • Memoria compartida
  • Tubos con nombre
  • Sockets TCP/UDP (eventualmente locales)

La memoria compartida tiene la ventaja del rendimiento, porque no tiene ningún búfer al enviar/recibir mensajes. Pero tienes que sincronizar tus intercambios de datos con otro IPC. Pueden ser semáforos IPC o ... canalizaciones o sockets con nombre.

Cuando el rendimiento no es el objetivo principal, tiendo a preferir los sockets ya que su uso es simple y puede extenderse a la comunicación entre computadoras.

La mejor manera es abstraer su comunicación con una clase que pueda usar memoria compartida cuando los dos procesos están en la misma computadora y sockets si no. Entonces tienes que elegir entre UDP y TCP;-)

Para el intercambio sincronizado/de búfer, prefiera TCP ya que es más confiable.

No utilizo canalizaciones con nombre porque prefiero socket por la posibilidad de utilizar la comunicación entre ordenadores y, por supuesto, puede encontrar muchas bibliotecas de sockets portátiles...

mis2cents

EDITAR:

Para la sincronización, la memoria compartida quizás no sea la mejor herramienta. En su caso se puede utilizar compartiendo un pequeño espacio de memoria, con un espacio para cada proceso que espera comandos. Puede sondear cualquier comando entrante o usar un semáforo compartido. La forma más rápida es que sus procesos esperen semáforos con nombre y lean un espacio de memoria compartido para sus comandos/parámetros. El uso de canalizaciones con nombre es seguramente más simple pero no tan rápido. ¿Seguramente no necesitas ser tan rápido? De todos modos, resuma eso en una clase que modela su protocolo de intercambio y pruebe las dos formas :-)


Una buena opción es usar socketpair, muy rápido y eficiente.


Boost tiene una buena biblioteca InterProcess que es multiplataforma y bastante intuitiva.

Sin embargo, solo he jugado con él, por lo que podría haber mejores alternativas.

Sin embargo, si realmente no necesita memoria compartida, me quedaría con un enfoque de mensajería. Evitarás los callejones sin salida y las condiciones de carrera. El principio de la canalización es realmente genial, ¡e incluso permite comportamientos perezosos que pueden ahorrarle mucho procesamiento dependiendo del asunto en cuestión!


Linux
  1. Presentamos la guía para la comunicación entre procesos en Linux

  2. Comunicación entre procesos en Linux:uso de conductos y colas de mensajes

  3. Comunicación entre procesos en Linux:Almacenamiento compartido

  4. Gestión de memoria de Linux:intercambio, cachés y VM compartida

  5. Memoria compartida de Linux:shmget() vs mmap()?

Cómo verificar la memoria compartida de Linux usando el comando ipcs

Detecte bibliotecas compartidas obsoletas en la memoria con UChecker

Cómo usar la memoria compartida con Linux en C

¿Eliminar la memoria compartida posix cuando no esté en uso?

Asignación y desasignación de memoria a través de límites de bibliotecas compartidas

rkhunter:segmentos sospechosos de memoria compartida