2010-07-03 4 views
6

OK, si je comprends bien, le .NET Threadpool gère un certain nombre de threads d'arrière-plan prêts à être utilisés pour des tâches quelconques.Threads de thread .NET Threadpool et threads d'E/S asynchrones

Les méthodes Get/SetMinThreads et Get/SetMaxThreads contiennent deux paramètres pouvant être renvoyés ou ajustés.

Selon les deux paramètres MSDN, les deux paramètres indiquent le nombre de threads de travail et le nombre de threads utilisés pour les opérations d'E/S asynchrones.

Quels types d'opérations utilisent ce type de fil spécifique?

fils de travailleurs:

  1. QueueUserWorkItem Je présume.
  2. Autre chose?

fils Async IO:

  1. Utilisé lors de l'appel Beginxxx, Endxxx sur les flux de fichiers par exemple? (Ou réseau, port série, etc.)
  2. Autre chose?

Merci pour toute précision, ou un bon lien sur le sujet.

Répondre

6

Oui, QUWI mais également la méthode BeginInvoke() d'un type délégué. Et utilisé par quelques classes, BackgroundWorker est l'exemple le plus connu. Qui sous le capot utilise simplement BeginInvoke délégué().

Les unités d'exécution d'E/S sont une fonctionnalité Windows de très bas niveau qui permet au code de s'exécuter rapidement lorsqu'une requête d'E/S est terminée. Plus visible depuis le dernier argument de la fonction ReadFileEx(), il y en a d'autres. L'équivalent géré est exposé via ThreadPool.BindHandle().

C'est le travail des classes .NET de le faire correctement. Quelques-uns l'utilisent: FileStream, PipeStream, FileSystemWatcher, Socket, le thread de travail interne de SerialPort et quelques classes de support de canal WCF.

Personnellement, je ne suis pas un grand fan de l'affichage de ces détails de configuration dans l'API, en particulier les threads d'achèvement d'E/S. C'est un peu un problème de la part de l'équipe de la BCL, du FUD de son côté. Ces paramètres affectent l'ensemble du programme, les paramètres par défaut sont déjà assez généreux. Bricoler avec eux équivaut à peu près à appeler GC.Collect(). Si jamais vous parvenez à trouver une bonne raison de les changer, il vaut mieux être coincé dans un enfer avec seulement une heure pour attraper l'avion à la maison. Été là :)

+0

Monsieur je suis un peu confus guide de pls. Si nous utilisons les délégués BeginInvoke et EndInvoke au lieu de QUWI, le nouveau thread créé pour effectuer l'opération asynchrone -> "Ce nouveau thread est-il pris du ThreadPool ??". Et ce sera WorkerThread ou ThreadPool Async IO du ThreadPool. – Dinesh

+2

Oui, thread threadpool, identique à QUWI. Un thread de travail, les threads d'E/S sont uniquement utilisés par les routines d'exécution d'E/S (méthode BindHandle()). –

+0

Merci Monsieur :) – Dinesh