c++ - entre - gestion de la memoria en linux
La mejor forma de comunicaciĆ³n entre procesos en C++ (5)
Tengo dos procesos, uno consultará otros datos. Habrá una gran cantidad de consultas en un tiempo limitado (10000 por segundo) y se transferirán datos (> 100 mb) por segundo. El tipo de datos será un tipo integral (doble , int) Mi pregunta es de qué manera conectar este proceso?
Memoria compartida, cola de mensajes, lpc (Llamada a procedimiento local) u otros ....
Y también quiero preguntar qué biblioteca sugieres? por cierto, no sugieras MPI. editar: bajo Windows XP 32 bits
Si sus datos consisten en varios tipos y / o necesita cosas como mutex, use Boost. De lo contrario, use una sección de memoria compartida usando #pragma data_seg o un archivo asignado a la memoria.
Si usa memoria compartida, tendrá que decidir si gira o no. Supongo que si usa un semáforo para sincronizar y almacenar datos en la memoria compartida, no obtendrá mucho beneficio de rendimiento en comparación con el uso de colas de mensajes (con una degradación de claridad significativa), pero si activa una variable atómica para la sincronización, entonces usted tiene que sufrir las consecuencias de eso.
Una palabra: Boost.InterProcess . Si realmente necesita ser rápido, la memoria compartida es el camino a seguir. Casi no tiene sobrecarga, ya que el sistema de operación realiza la asignación habitual entre direcciones virtuales y físicas y no se requiere copia para los datos. Solo tienes que buscar problemas de simultaneidad.
Para enviar comandos como shutdown y query , usaría las colas de mensajes. Anteriormente utilicé la programación de red localhost para hacer eso, y usé la asignación manual de memoria compartida, antes de saber sobre el impulso. Maldita sea si tuviera que volver a escribir la aplicación, inmediatamente elegiría el impulso. Boost.InterProcess hace que esto sea más fácil para usted. Echale un vistazo.
Voy a segunda sugerencia de Marc: no me molestaría con aumentar a menos que tengas una preocupación de portabilidad o si quieres hacer cosas geniales como mapas de contenedores estándar sobre la memoria compartida (en cuyo caso, definitivamente usaría boost).
De lo contrario, las colas de mensajes y la memoria compartida son bastante simples de manejar.
Yo usaría la memoria compartida para almacenar los datos y las colas de mensajes para enviar las consultas.