0

Je travaille sur un système de traitement intensif qui fait beaucoup de calculs. Le système a deux composants principaux en premier est de gérer l'entrée/sortie, et le second est de traiter ces données et de calculer les résultats. Mais le problème est qu'il n'est pas capable de gérer 50 éléments alors qu'il est censé gérer plus de 1000 éléments à la fois. Les deux composants ont plusieurs threads en cours d'exécution pour différentes tâches. Je suis sur une plateforme Linux et utilise C++. D'après ce que je comprends, dans les systèmes Linux, les threads et les processus sont presque similaires à part le partage de l'espace mémoire virtuel. Donc, ma question est: est-ce une bonne idée de séparer les E/S de l'unité de traitement et de les mettre dans des exécutables ou des processus séparés, puis d'utiliser la mémoire partagée ou les files d'attente de messages ou toute autre technique IPC?Optimisation du débit: multi-threads ou multi-process

+7

Il est judicieux de mesurer les performances de votre application à l'aide de profileurs et de déterminer les causes de sa lenteur. Jeter quelques suppositions sauvages est complètement inutile dans ce cas. – VTT

+0

Il est impossible de deviner quel est le problème sans plus (beaucoup plus d'informations) mais la communication inter-processus est généralement coûteuse, où l'inter-thread ne doit pas nécessairement l'être. – Surt

Répondre

0

Dans votre situation, absolument pas. Utiliser différents processus est fait pour la sécurité: Si un processus se bloque, l'autre continue. Si un pirate gère en un seul processus, vous pouvez limiter ses autorisations afin que le pirate informatique ne puisse rien faire de mal (les bogues dans votre code ne peuvent rien faire de mal non plus dans ce cas).

Utilisez les outils de profilage dont vous disposez. Les ordinateurs d'aujourd'hui sont si rapides que la plupart du temps, lorsqu'une tâche est trop lente, c'est à cause de quelque chose de stupide que fait l'application, et non à cause d'une optimisation manquante.