ThreadPool.SetMinThreads(Int32, Int32) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Establece el número mínimo de subprocesos que el grupo de subprocesos crea a petición, según se realizan nuevas solicitudes, antes de conmutar a un algoritmo para administrar la creación y destrucción de subprocesos.
public:
static bool SetMinThreads(int workerThreads, int completionPortThreads);
public static bool SetMinThreads (int workerThreads, int completionPortThreads);
static member SetMinThreads : int * int -> bool
Public Shared Function SetMinThreads (workerThreads As Integer, completionPortThreads As Integer) As Boolean
Parámetros
- workerThreads
- Int32
Número mínimo de subprocesos de trabajo que el grupo de subprocesos crea a petición.
- completionPortThreads
- Int32
Número mínimo de subprocesos de E/S asincrónicos que el grupo de subprocesos crea a petición.
Devoluciones
Es true
si el cambio se realiza correctamente; en caso contrario, es false
.
Ejemplos
En el ejemplo siguiente se establece el número mínimo de subprocesos de trabajo en cuatro y se conserva el valor original para el número mínimo de subprocesos de finalización de E/S asincrónicas.
using namespace System;
using namespace System::Threading;
int main()
{
int minWorker;
int minIOC;
// Get the current settings.
ThreadPool::GetMinThreads( minWorker, minIOC );
// Change the minimum number of worker threads to four, but
// keep the old setting for minimum asynchronous I/O
// completion threads.
if ( ThreadPool::SetMinThreads( 4, minIOC ) )
{
// The minimum number of threads was set successfully.
}
else
{
// The minimum number of threads was not changed.
}
}
using System;
using System.Threading;
public class Test
{
public static void Main()
{
int minWorker, minIOC;
// Get the current settings.
ThreadPool.GetMinThreads(out minWorker, out minIOC);
// Change the minimum number of worker threads to four, but
// keep the old setting for minimum asynchronous I/O
// completion threads.
if (ThreadPool.SetMinThreads(4, minIOC))
{
// The minimum number of threads was set successfully.
}
else
{
// The minimum number of threads was not changed.
}
}
}
Imports System.Threading
Public Class Test
<MTAThread> _
Public Shared Sub Main()
Dim minWorker, minIOC As Integer
' Get the current settings.
ThreadPool.GetMinThreads(minWorker, minIOC)
' Change the minimum number of worker threads to four, but
' keep the old setting for minimum asynchronous I/O
' completion threads.
If ThreadPool.SetMinThreads(4, minIOC) Then
' The minimum number of threads was set successfully.
Else
' The minimum number of threads was not changed.
End If
End Sub
End Class
Comentarios
Este método no se admite cuando el grupo de subprocesos de Windows está configurado para usarse en lugar del grupo de subprocesos de .NET. Para obtener más información, consulte la configuración del grupo de subprocesos de Windows.
El grupo de subprocesos proporciona nuevos subprocesos de trabajo o subprocesos de finalización de E/S a petición hasta que alcanza el mínimo para cada categoría. Cuando se alcanza el mínimo, el grupo de subprocesos puede crear subprocesos adicionales en esa categoría o esperar hasta que se completen algunas tareas. A partir de .NET Framework 4, el grupo de subprocesos crea y destruye subprocesos para optimizar el rendimiento, que se define como el número de tareas que se completan por unidad de tiempo. Si hay demasiados pocos subprocesos, puede que los recursos disponibles no se usen de manera óptima, mientras que si hay demasiados subprocesos, puede aumentar la contención de recursos.
Cuando la demanda es baja, el número real de subprocesos del grupo de subprocesos puede descender por debajo de los valores mínimos.
Si especifica un número negativo o un número mayor que el número máximo de subprocesos activos del grupo de subprocesos (obtenido mediante GetMaxThreads), SetMinThreads devuelve false
y no cambia ninguno de los valores mínimos.
De forma predeterminada, el número mínimo de subprocesos se establece en el número de procesadores. Puede usar SetMinThreads para aumentar el número mínimo de subprocesos, como para solucionar temporalmente problemas en los que algunos elementos de trabajo en cola o tareas bloquean subprocesos del grupo de subprocesos. Estos bloqueos a veces conducen a una situación en la que todos los subprocesos de finalización de E/S o de trabajo están bloqueados (hambre). Sin embargo, aumentar el número mínimo de subprocesos podría degradar el rendimiento de otras maneras, como:
- El grupo de subprocesos puede programar más subprocesos de trabajo, incluso cuando los subprocesos de trabajo no se bloquean. La suscripción excesiva puede hacer que los subprocesos que se programen se retrasen significativamente a medida que esperan en una cola larga para obtener otro segmento de tiempo, lo que retrasa algunos elementos de trabajo o tareas.
- Los subprocesos de trabajo pueden tardar más tiempo de CPU en poner en cola los elementos de trabajo debido a tener que examinar más subprocesos para robar el trabajo.
- El cambio de contexto entre subprocesos puede aumentar el uso de cpu.
- La recolección de elementos no utilizados puede tardar más tiempo de CPU en caminar por la pila de subprocesos.
- El proceso puede consumir más memoria.
Precaución
El uso del SetMinThreads método para aumentar el número mínimo de subprocesos puede causar problemas de rendimiento, como se describe en el texto anterior. En la mayoría de los casos, el grupo de subprocesos funcionará mejor con su propio algoritmo para asignar subprocesos. Reducir el mínimo a menos que el número de procesadores también puede dañar el rendimiento.