2010-07-03 19 views
6

OK, según tengo entendido, .NET Threadpool mantiene una serie de subprocesos de fondo listos para ser utilizados en tareas de algún tipo..NET subprocesos de trabajo de Threadpool y subprocesos de I/O asincrónicos

Los métodos Get/SetMinThreads y Get/SetMaxThreads contienen dos parámetros que se pueden devolver o ajustar.

De acuerdo con MSDN, los dos parámetros indican el número de subprocesos de trabajo y el número de subprocesos utilizados para las operaciones asincrónicas de E/S.

¿Qué tipo de operaciones utilizan este tipo específico de hilo?

subprocesos de trabajo:

  1. QueueUserWorkItem supongo.
  2. ¿Algo más?

hilos asíncrono IO:

  1. usado en la llamada Beginxxx, Endxxx de secuencias de archivo, por ejemplo? (O red, puerto serie, etc.)
  2. ¿Algo más?

Gracias por cualquier aclaración, o un buen enlace sobre el tema.

Respuesta

6

Sí, QUWI pero también el método BeginInvoke() de un tipo de delegado. Y empleado por unas pocas clases, BackgroundWorker es el mejor ejemplo conocido. Que bajo el capó simplemente usa BeginInvoke del delegado().

Los subprocesos de finalización de E/S son una característica de Windows de nivel muy bajo para que el código se ejecute rápidamente cuando se completa una solicitud de E/S. Más visible desde el último argumento de la función ReadFileEx(), hay otros. El equivalente administrado se expone a través de ThreadPool.BindHandle().

Es el trabajo de las clases de .NET hacerlo bien. Solo unos pocos lo usan: FileStream, PipeStream, FileSystemWatcher, Socket, el hilo de trabajo interno de SerialPort y algunas clases de soporte de canal WCF.

Personalmente, no me gusta mucho que estos detalles de configuración estén expuestos en la API, especialmente los de subprocesos de finalización de E/S. Es una especie de escape del equipo BCL, algo de FUD en su parte final. Estas configuraciones afectan todo el programa, los valores predeterminados ya son bastante generosos. Jugar con ellos es más o menos equivalente a llamar a GC.Collect(). Si alguna vez logras encontrar una buena razón para cambiarlos, será mejor cuando te quedes atrapado en un agujero infernal con solo una hora para tomar el avión de vuelta a casa. He estado allí :)

+0

Sir soy un poco confundido por favor guía. Si usamos los delegados BeginInvoke y EndInvoke en lugar de QUWI, el nuevo subproceso creado para realizar la operación asincrónica -> "¿Es este nuevo subproceso tomado del ThreadPool ??". Y será WorkerThread o Async IO Thread of the ThreadPool. – Dinesh

+2

Sí, hilo de subprocesos, igual que QUWI. Un subproceso de trabajo, los subprocesos de E/S solo son utilizados por las rutinas de finalización de E/S (método BindHandle()). –

+0

Gracias señor :) – Dinesh

Cuestiones relacionadas