c# - usar - Aclaración sobre hilos de la piscina de hilos max.
hilos visual c# (2)
He leído here que
En v2.0, 3.5 y 4.0, ASP.NET inicializa CLR ThreadPool con 100 subprocesos por procesador (núcleo)
Eso es correcto, lo verifiqué ( tengo una máquina con 8 núcleos, por lo que 8 * 100 = 800 ):
Pero entonces vi this y this :
maxWorkerThreads: configura el número máximo de subprocesos de trabajo para usar en el proceso por CPU. El rango para este atributo es de
5 through 100.
El valor predeterminado es20
.
Pregunta
No veo cómo encajan los números aquí:
El primer párrafo dice que tengo un máximo de 100 hilos por núcleo (la imagen lo demuestra, tengo 8 núcleos).
Pero el segundo párrafo establece que el máximo de subprocesos de trabajo por núcleo es 20. Por lo tanto, si tengo 8 núcleos, debo tener 8 * 20 = 160 subprocesos máximos. No 800.
¿Alguien puede por favor arrojar luz?
Actualizar:
Acabo de encontrar una manera de obtener el valor del elemento clave a través del código c #:
Así que ahora el número está en forma, pero aún así - MSDN dice que el valor predeterminado es 20, no 100
Y luego mencionan 100:
¿Qué está pasando aquí?
He mirado el código fuente y he encontrado que el valor predeterminado para MaxWorkerThreads
está establecido en 100
private static readonly ConfigurationProperty _propMaxWorkerThreads = new ConfigurationProperty("maxWorkerThreads", typeof (int), (object) 100, (TypeConverter) null, (ConfigurationValidatorBase) new IntegerValidator(1, 2147483646), ConfigurationPropertyOptions.None);
Este campo se agrega a la colección de propiedades en el constructor estático.
ProcessModelSection._properties.Add(ProcessModelSection._propMaxWorkerThreads);
En la definición de la propiedad ellos establecen el valor por defecto a 20
[IntegerValidator(MaxValue = 2147483646, MinValue = 1)]
[ConfigurationProperty("maxWorkerThreads", DefaultValue = 20)]
public int MaxWorkerThreads
Pero esto obviamente no da efecto. Tal vez sea algún tipo de implementación legada. Por cierto, se comporta de esta manera solo si autoConfig
se establece en falso. Cuando se establece en true, tengo subprocesos de trabajo de 32K en mi aplicación. Probablemente este comportamiento depende de la versión de IIS.
Según la MSDN,
el máximo predeterminado [número de subprocesos en el grupo de servidores ASP.net] para .NET 4.5 es 5,000