ThreadPool.SetMinThreads(Int32, Int32) Metodo

Definizione

Imposta il numero minimo di thread che il pool di thread crea, man mano che vengono effettuate nuove richieste, prima di passare a un algoritmo per la gestione della creazione e dell'eliminazione del thread.

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

Parametri

workerThreads
Int32

Il numero minimo di thread di lavoro che vengono creati su richiesta dal pool di thread.

completionPortThreads
Int32

Il numero minimo di thread I/O asincroni che vengono creati su richiesta dal pool di thread.

Restituisce

true se la modifica ha esito positivo; in caso contrario, false.

Esempio

L'esempio seguente imposta il numero minimo di thread di lavoro su quattro e mantiene il valore originale per il numero minimo di thread di completamento di I/O asincroni.

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

Commenti

Questo metodo non è supportato quando il pool di thread di Windows è configurato per essere usato anziché il pool di thread .NET. Per altre informazioni, vedere l'impostazione configurazione del pool di thread di Windows.

Il pool di thread fornisce nuovi thread di lavoro o thread di completamento di I/O su richiesta finché non raggiunge il minimo per ogni categoria. Quando viene raggiunto il valore minimo, il pool di thread può creare thread aggiuntivi in tale categoria o attendere il completamento di alcune attività. A partire da .NET Framework 4, il pool di thread crea e elimina i thread per ottimizzare la velocità effettiva, definita come numero di attività completate per unità di tempo. Un numero troppo ridotto di thread potrebbe non usare in modo ottimale le risorse disponibili, mentre troppi thread potrebbero aumentare il conflitto per le risorse.

Quando la richiesta è bassa, il numero effettivo di thread del pool può scendere sotto i valori minimi.

Se si specifica un numero negativo o un numero maggiore del numero massimo di thread attivi del pool di thread (ottenuto usando GetMaxThreads), SetMinThreads restituisce false e non cambia uno dei valori minimi.

Per impostazione predefinita, il numero minimo di thread è impostato sul conteggio dei processori. È possibile usare SetMinThreads per aumentare il numero minimo di thread, ad esempio per risolvere temporaneamente i problemi in cui alcuni thread del pool di thread in coda o attività bloccano i thread del pool di thread. Tali blocchi talvolta comportano una situazione in cui tutti i thread di completamento di lavoro o I/O vengono bloccati (starvazione). Tuttavia, l'aumento del numero minimo di thread potrebbe ridurre le prestazioni in altri modi, ad esempio:

  • Il pool di thread può pianificare più thread di lavoro, anche quando i thread di lavoro non vengono bloccati. L'oversubscription può causare un ritardo significativo dei thread pianificati perché attendeno in una coda lunga per ottenere un'altra sezione temporale, ritardando alcuni elementi di lavoro o attività.
  • I thread di lavoro possono richiedere più tempo della CPU per dequeuare gli elementi di lavoro a causa della necessità di analizzare più thread da cui rubare il lavoro.
  • Il passaggio del contesto tra thread può aumentare l'utilizzo della CPU.
  • La Garbage Collection può richiedere più tempo per la CPU nel percorso dello stack di thread.
  • Il processo può utilizzare più memoria.

Attenzione

L'uso del SetMinThreads metodo per aumentare il numero minimo di thread può causare problemi di prestazioni, come descritto nel testo precedente. Nella maggior parte dei casi, il pool di thread eseguirà prestazioni migliori con il proprio algoritmo per l'allocazione dei thread. Ridurre il minimo a meno del numero di processori può anche danneggiare le prestazioni.

Si applica a

Vedi anche