C ++ Multi-threading avec plusieurs machines

Eh bien, mon problème est le suivant. J’ai un morceau de code qui s’exécute sur plusieurs machines virtuelles, et chaque machine virtuelle a N interfaces (un thread par chacun). Le problème lui-même reçoit un message sur une interface et le redirige vers une autre interface le plus rapidement possible.

Ce que je fais, lorsque je reçois un message sur une interface (Unicast), calcule l’interface sur laquelle je veux le redirect, enregistre toutes les informations sur le message (Datagramme et toutes les informations supplémentaires que je souhaite) avec une fonction J’ai fait. Ensuite, à la prochaine itération, le programme vérifie s’il y a de nouveaux messages à redirect et si c’est l’interface correcte qui le lit. Et ainsi de suite … Mais cela rend l’échange d’informations du programme très lent …

Y a-t-il un mécanisme qui peut accélérer les choses?

Quelqu’un a déjà inventé cette roue particulière – elle s’appelle MPI

Jetez un oeil à openMPI ou MPICH

Pourquoi n’utilisez-vous pas la queue? Au fur et à mesure que les messages entrent, mettez-les dans une queue et informez chaque module de traitement de les récupérer dans la queue. Par exemple:

  • MSG arrive
  • Le module 1 le met en queue
  • Module 2,3 notifié
  • Le module 2 le récupère de la queue et l’a enregistré dans la firebase database
  • En parallèle, le module 3 le récupère de la queue et le traite

La clé est “en parallèle”. Comme ces modules sont différents, alors que le module 2 enregistre sur la firebase database, le module 3 peut masser votre message.

Vous pouvez utiliser JMS ou MQ ou créer votre propre queue.

Il semble que vous essayiez de faire du calcul parallèle sur plusieurs “machines” (même virtuelles). Vous souhaiterez peut-être examiner les protocoles existants, tels que MPI – Message Passing Interface, pour gérer ce domaine, car ils disposent de nombreuses fonctionnalités qui facilitent ce type de scénario.