Condividi tramite


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 invece del pool di thread .NET. Per altre informazioni, vedere l'impostazione di 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 fino a raggiungere il valore 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 ed elimina definitivamente 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 del pool di thread attivi (ottenuto usando GetMaxThreads), SetMinThreads restituisce false e non modifica uno dei valori minimi.

Per impostazione predefinita, il numero minimo di thread è impostato sul numero di processori. È possibile usare SetMinThreads per aumentare il numero minimo di thread, ad esempio per risolvere temporaneamente i problemi in cui alcuni elementi di lavoro in coda o attività bloccano i thread del pool di thread. Tali blocchi talvolta portano a una situazione in cui tutti i thread di completamento di I/O o di lavoro vengono bloccati (fame). Tuttavia, l'aumento del numero minimo di thread potrebbe compromettere 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 durante l'attesa in una coda lunga per ottenere un altro intervallo di tempo, ritardando alcuni elementi di lavoro o attività.
  • I thread di lavoro possono richiedere più tempo di CPU per rimuovere dalla coda gli elementi di lavoro a causa della necessità di analizzare più thread per rubare il lavoro.
  • Il cambio di contesto tra thread può aumentare l'utilizzo della CPU.
  • L'operazione di Garbage Collection può richiedere più tempo di CPU nello stack di thread.
  • Il processo può utilizzare una quantità maggiore di 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 migliorerà con il proprio algoritmo per l'allocazione dei thread. La riduzione del valore minimo a minore del numero di processori può anche compromettere le prestazioni.

Si applica a

Vedi anche