ThreadPool SetMaxThreads y SetMinThreads Número mágico


¿Hay un número mágico o una fórmula para establecer los valores de SetMaxThreads y SetMinThreads para ThreadPool? Tengo miles de métodos de larga duración que necesitan ejecución, pero no puedo encontrar la combinación perfecta para establecer estos valores. Cualquier consejo sería muy apreciado.

Author: Benny, 2010-01-11

3 answers

El número mínimo predeterminado de subprocesos es el número de núcleos que tiene su máquina. Ese es un buen número, generalmente no tiene sentido ejecutar más subprocesos de los que tiene núcleos.

El número máximo predeterminado de subprocesos es 250 veces el número de núcleos que tiene en.NET 2.0 SP1 y superiores. Hay una enorme cantidad de espacio para respirar aquí. En una máquina de cuatro núcleos, tomaría 499 segundos alcanzar ese máximo si ninguno de los hilos se completa en una cantidad razonable de tiempo.

El programador de threadpool intenta limitar el número de subprocesos activos al mínimo, por defecto el número de núcleos que tiene. Dos veces por segundo permite que se inicie un subproceso más si los subprocesos activos no se completan. Los hilos que se ejecutan durante mucho tiempo o hacen mucho bloqueo que no es causado por E/S no son buenos candidatos para el threadpool. Deberías usar un hilo regular en su lugar.

Llegar al máximo no es saludable. En una máquina de cuatro núcleos, solo las pilas de esos hilos consumirán un gigabyte de espacio de memoria virtual. Conseguir OOM es muy probable. Considere reducir el número máximo de hilos si ese es su problema. O considere comenzar solo unos pocos hilos regulares que reciban paquetes de trabajo de una cola segura para hilos.

 41
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-09 01:41:28

Típicamente, el número mágico es dejarlo solo. El ThreadPool hace un buen trabajo manejando esto.

Dicho esto, si estás haciendo muchos servicios de larga duración, y esos servicios tendrán grandes períodos en los que están esperando, es posible que desees aumentar el máximo de subprocesos para manejar más opciones. (Si los procesos no están bloqueando, probablemente ralentizarás las cosas si aumentas el número de subprocesos...)

Perfile su aplicación para encontrar la correcta numero.

 8
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-11 18:29:47

Si desea un mejor control, es posible que desee considerar NO usar el ThreadPool integrado. Hay un buen reemplazo en http://www.codeproject.com/KB/threads/smartthreadpool.aspx .

 5
Author: Michael Bray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-11 18:33:39