2009-02-12 4 views
29

Nous avons une application .NET qui effectue plusieurs appels simultanés à divers services Web, recueille leurs réponses et fait quelques calculs hors de ces réponses. En essayant de dériver des performances supplémentaires, j'ai étudié l'utilisation des approches qui utilisent le thread d'E/S .NET via l'utilisation de ports d'achèvement d'E/S. J'ai lu plusieurs ressources, y compris le récent livre de Joe Duffy, Concurrent Programming sur Windows, et même si j'obtiens leur utilité, je ne suis pas très clair sur leur comportement au sein de .NET et je cherche une explication concise.Comment .NET utilise-t-il des threads IO ou des ports d'achèvement d'E/S?

+1

Peut-être d'intérêt: http://marcgravell.blogspot.com/2009/02/async-without-pain.html –

Répondre

25

Il est possible que vous n'ayez rien à faire si vous utilisez déjà les méthodes asynchrones. Selon la technologie que vous utilisez pour l'appel au service Web, en fin de compte, il va tomber à l'API Win32 pour faire l'appel pour obtenir des octets à partir du réseau, et à cette fin, il utilisera l'achèvement des E/S Ports afin de gérer les appels asynchrones. Le principe de base derrière les ports d'achèvement d'E/S est qu'en attendant les opérations d'E/S, il existe un pool d'unités d'exécution qui attend que les opérations d'E/S se terminent (en supposant que vous vous soyez enregistré pour utiliser E/S ports). Une fois l'opération enregistrée terminée, le thread du pool de threads du port d'achèvement d'E/S est utilisé pour gérer le rappel.

Bien sûr, après avoir appelé le port de complétion d'E/S, votre thread peut passer à autre chose, ou se terminer, le choix vous appartient.

Ce qui suit devrait aider à décrire plus:

E/S achèvement Ports:

http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx

Ports d'achèvement intérieur I/O (WayBack Machine):

https://web.archive.org/web/20101101112358/http://doc.sch130.nsc.ru/www.sysinternals.com/ntw2k/info/comport.shtml

+0

Le peu sur une piscine partagée faisant du travail alors que l'IO est éteint dans IO land était exactement ce que j'espérais. Merci pour l'explication. –

Questions connexes