2008-12-17 6 views
1

Je suis actuellement à la recherche sur Internet d'une implémentation de pool de threads personnalisée. J'ai trouvé une implémentation qui utilise des IOCP. Je me demande quel est l'avantage de les utiliser? Est-ce qu'ils fournissent le vol de travail, ou quelque chose comme ça, je pourrais vraiment trouver une réponse ...IOCP dans le pool de threads personnalisés

+1

Peut-être pourriez-vous ajouter le lien vers l'implémentation de pool de threads personnalisée que vous avez trouvée? –

Répondre

7

IOCP = "Port d'achèvement IO". C'est un objet noyau intégré au système d'exploitation Windows qui vous permet de gérer intelligemment les E/S asynchrones multithread.

En termes très simplistes (et un peu simplistes), vous informez le CPEI des tâches d'E/S que vous souhaitez effectuer. Il les exécutera de manière asynchrone et maintiendra une file d'attente des résultats de chacun de ces travaux. Votre appel à informer le CIO sur le travail revient immédiatement (il ne bloque pas lorsque l'IO se produit). Vous êtes renvoyé un objet qui est conceptuellement comme le. IAsyncResult .NET vous permet de bloquer si vous le souhaitez, ou vous pouvez fournir un rappel, ou vous pouvez périodiquement interroger pour voir si le travail est terminé.

Lors de ces tâches, le protocole IOCP utilise un pool de threads. Le pool de threads tente de limiter le nombre de threads au nombre de processeurs ou moins (c'est configurable, mais l'intention et la valeur par défaut est de le limiter au nombre de processeurs). Cependant, le protocole IOCP prévoit que les tâches de ces threads peuvent parfois être bloquées. Les tâches d'E/S d'Asycn ne bloquent pas, mais vous pourriez avoir fourni un autre type de tâche. Donc, vous pouvez donner un autre numéro à l'IOCP ... c'est un nombre de threads supérieur au "maximum habituel", que l'IOCP est autorisé à atteindre en raison de l'un des autres threads bloqués. Le but est d'avoir jusqu'à "l'maximum habituel" de threads qui sont en train de faire quelque chose (c'est-à-dire non bloqués). Si cela se produit, pendant un certain temps, l'IOCP utilisera plus de threads que le maximum habituel, mais il refusera de créer de nouveaux threads jusqu'à ce qu'il puisse revenir au "max habituel".

Ceci est un bref résumé, conceptuel seulement, et comme je l'ai dit, simplifié à certains égards. Mais cela devrait vous donner l'idée générale. Les livres de Jeffrey Richter sur le système d'exploitation Windows couvrent cela en détail (mais ces livres sont épuisés maintenant). Vous pouvez trouver ces livres utilisés, et ils coûtent en fait plus utilisés qu'ils ne le faisaient à l'origine. Je pense que "Advanced Windows" est le titre que vous voulez, mais il peut y avoir eu une version mise à jour du livre avec un titre différent.

+0

Bonne description. Merci! – John

+0

Charlie, The Richter livre a été réimprimé et renommé, il est maintenant connu sous le nom de Windows Via C/C++. –

+0

@Len, merci, c'est bon à savoir. –

0

Vous pouvez utiliser une implémentation IOCP si vous envisagez d'utiliser des fonctions Windows IO à partir de vos threads de production. La fonction IO peut être en lecture/écriture sur le disque ou sur le réseau.

Cochez Push Framework http://www.pushframework.com pour voir une utilisation de l'IOCP pour l'implémentation du serveur en temps réel.

Questions connexes