2011-11-21 3 views
0

Je suis en train de concevoir un système OMS et d'essayer d'utiliser des techniques multi-thread pour accélérer le traitement.Pool de threads et affinité des données

Un moyen facile consiste à allouer des threads de façon statique: un thread pour tous les titres commençant par une lettre. Évidemment, certains d'entre eux pourraient être très occupés alors que d'autres n'ont rien à faire. Et nous ne savons pas à l'avance quels stocks les utilisateurs vont entrer.

Alors je me tourne vers le pool de threads. Maintenant, le temps est susceptible d'être réparti plus également entre les threads. Mais il y a un surcoût à gérer: je dois bloquer chaque ordre, ce qui n'est certainement pas agréable.

Une idée sur la façon de minimiser le temps de verrouillage et d'atteindre un débit plus élevé?

Merci beaucoup pour vos suggestions.

P.S, c'est un environnement Unix. La langue utilisée est C++

Répondre

0

Généralement, le thread par tâche est une très mauvaise décision. Le meilleur moyen est de séparer les tâches en groupes logiques avec leurs propres pools de threads (ou, peut-être avec 1 thread par tâche). Vous devez également organiser la communication entre les tâches, par exemple par des requêtes. Est-ce que vous cherchez throw existé des implémentations de pool de threads comme threadpool?

+0

Alex, Il me semble que toutes les implémentations de pool de threads ne prennent pas en compte l'affinité des données. Donc, si j'utilise un pool de threads, beaucoup de verrous/notifications sont nécessaires pour assurer l'intégrité des données. Connaissez-vous des implémentations de pool de threads prenant en compte l'affinité des données? Idéalement, je ne veux pas de verrou dans mon code. Tous les événements d'une commande doivent être traités de manière séquentielle. Merci Pat – user1057019

+0

"Toutes les implémentations de pool de threads ne prennent pas en compte l'affinité des données" - oui. "si j'utilise un pool de threads, beaucoup de verrous/notifications sont nécessaires pour assurer l'intégrité des données" - non. Fondamentalement, vous devez ajouter des verrous/notifications pour fournir une opération de requête d'ajout/suppression atomique, en cas d'utilisation de files d'attente pour les communications. Je suppose que vous feriez mieux de regarder le tutoriel ACE (cs.wustl.edu/~schmidt/ACE.html), ils fournissent des informations sur la création du serveur de pool de threads. –