/ / ¿Cómo configurar la comunicación entre dos procesos? - linux, enchufes

¿Cómo configurar la comunicación entre dos procesos? - linux, enchufes

Tengo la siguiente situación:

  1. Un daemon que hace una operación privilegiada en los datos que se guardan en la memoria.

  2. Un servidor multiproceso que se ejecuta actualmente en aproximadamente 30 núcleos que manejan las solicitudes de los usuarios.

El servidor (1) recibiría consultas de (2),procesarlos uno por uno y devolver una respuesta. Cada consulta a (1) nunca se bloquearía y solo tardaría una fracción de microsegundo en (1) en procesarse, por lo que estamos seguros de que obtendremos respuestas rápidamente, a menos que (1) se sobrepase por demasiada carga.

Básicamente, me gustaría establecer una situacióndonde (1) escucha un socket de dominio UNIX y (2) escribe solicitudes y lee respuestas. Sin embargo, me gustaría que cada hilo de (2) pueda leer y escribir al mismo tiempo. Mi idea es tener un socket UNIX por hilo para comunicación entre (1) y (2) tener (1) bloquear en epoll_wait en estos sockets procesando solicitudes una a una. Cada hilo en (2) leería y escribiría de forma independiente en su zócalo.

El problema que veo con este enfoque es queNo puedo aumentar de forma dinámica el número de subprocesos en (2). ¿Hay alguna manera de lograr esto de una manera que sea flexible con respecto a la configuración del tiempo de ejecución? Supongo que un enfoque sería tener una gran cantidad de sockets y una thread on (2) elegiría un socket al azar, tomaría un mutex, escribiría una consulta y bloquearía esperando una respuesta, luego liberaría el mutex una vez que obtenga una respuesta de (1).

Alguien tiene mejores ideas?

Respuestas

0 para la respuesta № 1

Sugeriría una posibilidad viable es ircon su propia propuesta y haga que cada subproceso cree su propio socket para comunicarse con el daemon. Puede usar conectores de transmisión (tcp) que pueden resolver fácilmente su problema de agregar más hilos dinámicamente:

  1. El daemon escucha en un puerto particular, usando socket(), bind() y listen(). El socket que se escucha inicialmente es lo único en su epoll_wait conjunto.
  2. Los hilos del cliente se conectan a este puerto con connect()
  3. El servidor daemon acepta (con accept()) la conexión entrante para crear un nuevo socket, que se agrega a su epoll_wait colocado con epoll_ctl().

El procedimiento anterior se puede usar para agregar arbitrariamente tantos sockets como necesites, todo con un solo epoll_wait bucle en el lado daemon.