¿Cuál es la diferencia entre un subproceso de trabajo y un subproceso de E / S?
-
02-07-2019 - |
Pregunta
Mirando el elemento processmodel en Web.Config hay dos atributos.
maxWorkerThreads="25"
maxIoThreads="25"
¿Cuál es la diferencia entre los subprocesos de trabajo y los subprocesos de E / S?
Solución
Fundamentalmente, no mucho, se trata de cómo ASP.NET e IIS asignan objetos de espera de E / S y administran la contención y la latencia de la comunicación a través de la red y la transferencia de datos.
Los hilos de E / S se reservan como tales porque estarán haciendo E / S (como su nombre lo indica) y es posible que tengan que esperar " durante mucho tiempo " Períodos de tiempo (cientos de milisegundos). También se pueden optimizar y utilizar de manera diferente para aprovechar la funcionalidad del puerto de finalización de E / S en el kernel de Windows. Un único hilo de E / S puede administrar múltiples puertos de finalización para mantener el rendimiento.
Windows tiene muchas capacidades para lidiar con el bloqueo de E / S, mientras que ASP.NET/.NET tiene un concepto simple de " Thread " ;. ASP.NET puede optimizar la E / S usando más de las capacidades de subprocesos no administrados en el sistema operativo. No querría hacer esto todo el tiempo para cada subproceso, ya que pierde muchas de las capacidades que le ofrece .NET, por lo que existe una distinción entre la forma en que se pretende utilizar los subprocesos.
Los subprocesos de trabajo son subprocesos en los que " trabajo " o simplemente el código / procesamiento simple ocurre. Es poco probable que los subprocesos de trabajo bloqueen mucho o esperen en cualquier cosa y que se ejecuten brevemente y, por lo tanto, requieren una programación más agresiva para maximizar la capacidad de procesamiento y el rendimiento.
[Editar]: también encontré este enlace que es particularmente relevante para esta pregunta: http: / /blogs.msdn.com/ericeil/archive/2008/06/20/windows-io-threads-vs-managed-io-threads.aspx
Otros consejos
Sólo para agregar a chadmyers ... Parece que los subprocesos de E / S eran la antigua forma en que ASP.NET atendía las solicitudes,
" Las solicitudes en IIS 5.0 son típicamente servicio a través de hilos de E / S, o hilos realizando I / O asíncrono porque Las solicitudes se envían al trabajador. proceso utilizando escrituras asíncronas a una tubería nombrada. "
con IIS6.0 esto ha cambiado.
" Por lo tanto, todas las solicitudes ahora son atendidas por hilos de trabajo extraídos de la CLR grupo de subprocesos y nunca en subprocesos de E / S. "
Fuente: http://msdn.microsoft.com /hi-in/magazine/cc164128(en-us).aspx