c# - practices - ThreadPool SetMaxThreads y SetMinThreads Magic Number
threadpool.queueuserworkitem example c# (3)
El número mínimo predeterminado de hilos 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 superior. 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 un tiempo razonable.
El planificador de subprocesos intenta limitar el número de subprocesos activos al mínimo, de forma predeterminada el número de núcleos que tiene. Dos veces por segundo permite que se inicie un hilo más si los hilos activos no se completan. Los subprocesos que se ejecutan durante mucho tiempo o hacen mucho bloqueo que no es causado por I / O no son buenos candidatos para el conjunto de subprocesos. 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 subprocesos consumirán un gigabyte de espacio de memoria virtual. Conseguir OOM es muy probable. Considera bajar el número máximo de hilos si ese es tu problema. O considere comenzar solo unos pocos subprocesos regulares que reciben paquetes de trabajo de una cola segura para subprocesos.
¿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 ejecución prolongada que necesitan ejecución, pero simplemente no puedo encontrar la combinación perfecta para establecer estos valores. Cualquier consejo sería muy apreciado.
Si desea un mejor control, es posible que desee considerar NO usar el ThreadPool incorporado. Hay un buen reemplazo en http://www.codeproject.com/KB/threads/smartthreadpool.aspx .
Típicamente, el número mágico es dejarlo solo. El ThreadPool hace un buen trabajo de manejar esto.
Dicho esto, si está realizando una gran cantidad de servicios de larga duración, y esos servicios tendrán períodos prolongados en los que estarán esperando, es posible que desee aumentar el número máximo de subprocesos para manejar más opciones. (Si los procesos no se bloquean, es probable que disminuya la velocidad si aumenta el número de subprocesos ...)
Perfile su aplicación para encontrar el número correcto.