J'ai POSIX à l'esprit pour la mise en œuvre, même si cette question est plus sur l'architecture.Comment configurer et gérer plusieurs threads persistants?
Je pars d'une boucle de mise à jour qui a plusieurs tâches principales à faire. Je peux regrouper ces tâches en quatre ou cinq tâches principales qui ont des besoins d'accès mémoire communs. C'est mon idée de rompre ces travaux dans leurs propres discussions et les faire terminer un cycle de "mise à jour" et de dormir jusqu'à la prochaine image.
Mais comment synchroniser? Si je détache quatre ou cinq fils au début de chaque cycle, les faire courir une fois, mourir, puis détacher encore 4-5 fils à chaque passage? Cela semble cher.
Il semble plus raisonnable de créer ces threads une fois, et de les mettre en veille jusqu'à ce qu'un appel synchronisé le réveille.
Est-ce une sage approche? Je suis ouvert à accepter des réponses à partir de simples idées à des implémentations de toute nature.
EDIT: sur la base des réponses à ce jour, je voudrais ajouter:
-
concurrency
- est souhaitée
- ces threads de travail sont destinés à fonctionner à des durées très courtes < 250ms
- le travail fait par chaque thread sera toujours le même
- Je considère 4-5 threads, 20 étant une limite dure.
salut john. Je pense que cela ressemble à une approche raisonnable pour mes besoins. Je ne me vois pas dépasser 12 threads à ce sujet. d'autant plus que j'ai l'option de consolider les threads si N devient trop grand. Pour être clair, dans cette implémentation, les threads de travail sont toujours actifs, mais seul un sémaphore détachera le code? ou est-ce que la librairie posix mettra le fil en pause, puis réactivera le fil sur le sémaphore? la boucle du contrôleur définit simplement l'état du sémaphore, correct? – bitcruncher
Je ne suis pas sûr de ce que vous entendez par "actif". L'attente sur un sémaphore devrait amener le thread à se mettre en veille jusqu'à ce que le sémaphore soit incrémenté. Le thread ne doit pas utiliser les ressources du processeur ou du planificateur tant que les sémaphores ne sont pas libérés. Le thread du contrôleur est juste là pour définir l'état du sémaphore. Avec une complexité supplémentaire, ce thread peut être éliminé, mais la complexité est l'ennemi, et généralement vous avez quelque chose d'autre à faire pour ce thread. :) –