2011-09-13 2 views
0

Peut-on réutiliser le thread de port d'achèvement (pour une opération d'E/S asynchrone) en tant que thread de travail dans le processus CLR ThreadPool?Réactivité de thread

Si cela est naïf, quelqu'un peut-il me suggérer comment optimiser l'utilisation des threads de pool de threads afin de réduire le nombre d'éléments de travail empilés dans la file d'attente de travail.

Répondre

2

Les threads IOCP sont déjà des 'sorta workers' - ils prennent des entrées d'une file d'attente et agissent sur les éléments reçus. Si vous souhaitez éviter d'utiliser un autre pool de threads pour traiter des éléments autres que les objets de terminaison IOCP normaux des pilotes réseau, rien ne vous empêche de mettre en file d'attente manuellement les objets dans la file d'attente IOCP d'autres actions. J'oublie les API actuelles maintenant, mais je pense qu'il ne devrait y avoir aucun problème. Je me souviens avoir utilisé un tel mécanisme pour le réglage du serveur - réduire le nombre de threads IOCP en mettant en file d'attente un élément qui a demandé à l'unité d'exécution du pool IOCP de se terminer. Cela dit, je ne suis pas sûr qu'un tel mécanisme améliorera le débit de manière significative - le travail doit être fait quelque part et il se peut qu'éviter un pool de threads supplémentaire n'aide pas beaucoup. Empiriquement, en tant que mécanisme de communication inter-thread, une file d'attente IOCP a une performance pire que les files d'attente de messages Windows (inutile pour les pools de threads puisqu'une seule thread peut attendre) et files d'attente PC CS/sémaphore .

Mfg, Martin

+0

Salut Martin, Merci pour votre soutien. Même j'ai entendu parler de l'approche proposée. Mais je suis coincé et ne pas avoir assez de progrès après avoir googlé. –

Questions connexes