2010-10-04 6 views
1

Je veux implémenter un modèle de producteur - consommateurs en utilisant un ThreadPool pour les consommateurs. J'aurai 1 producteur de demandes et plusieurs consommateurs qui traiteront les demandes entrantes. Quand implémenter les consommateurs utilisant un pool de threads ma question si je devrais avoir ma propre file d'attente pour que le producteur mette des demandes et puis les passe au Cosumers ThreadPool ou si je devrais juste le passer directement à la File d'attente ThreadPool? Mon souci avec le dernier est combien de tâches on peut passer à une file d'attente ThreadPool et à quel rythme? Le producteur devrait être assez rapide en faisant un travail de «pré-traitement» avant de le transmettre aux fils de consommation. Est-ce que je n'ai pas plus de contrôle lorsque j'ai une file d'attente entre threads Producteur - Consommateur?ThreadPool et Producer - Question de conception de modèle de consommateur

Ceci est pour une application serveur qui doit être haute performance et devra gérer beaucoup de demandes de clients entrants. (Dans les centaines à la fois).

Tout conseil est apprécié!

Répondre

1

Une file d'attente entre le producteur et le pool de threads nécessite 1 ou 2 commutateurs de contexte supplémentaires: le pool de threads attend dans une file d'attente vide et doit ensuite être envoyé à un thread consommateur. À la fin, le consommateur doit être présenté au pool de threads. L'envoi et la gestion de la fin peuvent être gérés par la classe de message.
Avec tous les threads consommateurs en attente dans une file d'attente, l'un des écouteurs va consommer et arrêter d'écouter jusqu'à ce que prêt. Lorsque tous les consommateurs sont occupés, le message suivant sera traité lorsque le premier consommateur sera prêt.
Ainsi, le premier a un comportement un peu plus prévisible avec le coût des commutateurs contextuels supplémentaires.