ThreadPool.SetMinThreads(Int32, Int32) Método

Definición

Establece el número mínimo de subprocesos que el grupo de subprocesos crea a petición, a medida que se realizan nuevas solicitudes, antes de cambiar a un algoritmo para administrar la creación y destrucción del subproceso.

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 crea el grupo de subprocesos a petición.

completionPortThreads
Int32

Número mínimo de subprocesos de E/S asincrónicos que crea el grupo de subprocesos a petición.

Devoluciones

true si el cambio se realiza correctamente; de lo contrario, 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 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 alcance 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. Es posible que demasiados subprocesos no hagan un uso óptimo de los recursos disponibles, mientras que demasiados subprocesos podrían 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 del grupo de subprocesos activos (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 la cantidad mínima de subprocesos, por ejemplo, para solucionar temporalmente problemas en los que algunos elementos de trabajo o tareas en cola bloquean subprocesos del grupo de subprocesos. Esos bloqueos a veces conducen a una situación en la que todos los subprocesos de trabajo o de finalización de E/S están bloqueados (inanición). Sin embargo, aumentar el número mínimo de subprocesos puede 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 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 la 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.

Caution

El uso del SetMinThreads método para aumentar el número mínimo de subprocesos puede provocar problemas de rendimiento, tal 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 afectar al rendimiento.

Se aplica a

Consulte también