Partager via


ThreadPool.SetMinThreads(Int32, Int32) Méthode

Définition

Définit le nombre minimal de threads que le pool de threads crée à la demande, au fur et à mesure que de nouvelles requêtes sont effectuées, avant de basculer sur un algorithme pour la gestion de la création et de la suppression des threads.

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

Paramètres

workerThreads
Int32

Nombre minimal de threads de travail que le pool de threads crée à la demande.

completionPortThreads
Int32

Nombre minimal de threads d'E/S asynchrones que le pool de threads crée à la demande.

Retours

true si la modification aboutit ; sinon, false.

Exemples

L’exemple suivant définit le nombre minimal de threads de travail sur quatre et conserve la valeur d’origine pour le nombre minimal de threads d’achèvement d’E/S asynchrones.

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

Remarques

Cette méthode n’est pas prise en charge lorsque le pool de threads Windows est configuré pour être utilisé à la place du pool de threads .NET. Pour plus d’informations, consultez le paramètre de configuration du pool de threads Windows.

Le pool de threads fournit de nouveaux threads de travail ou des threads d’achèvement d’E/S à la demande jusqu’à ce qu’il atteigne le minimum pour chaque catégorie. Lorsque le minimum est atteint, le pool de threads peut créer des threads supplémentaires dans cette catégorie ou attendre que certaines tâches se terminent. À compter du .NET Framework 4, le pool de threads crée et détruit des threads afin d’optimiser le débit, qui est défini comme le nombre de tâches qui s’exécutent par unité de temps. Un nombre trop bas de threads peut ne pas permettre une utilisation optimale des ressources disponibles, tandis qu'un nombre trop élevé de threads peut augmenter les conflits de ressources.

Quand la demande est faible, le nombre réel de threads du pool peut être inférieur aux valeurs minimales.

Si vous spécifiez un nombre négatif ou un nombre supérieur au nombre maximal de threads de pool de threads actifs (obtenu à l’aide GetMaxThreadsde ), SetMinThreads retourne false et ne modifie aucune des valeurs minimales.

Par défaut, le nombre minimal de threads est défini sur le nombre de processeurs. Vous pouvez utiliser SetMinThreads pour augmenter le nombre minimal de threads, par exemple pour contourner temporairement les problèmes où certains éléments de travail ou tâches en file d’attente bloquent les threads du pool de threads. Ces blocages conduisent parfois à une situation où tous les threads d’achèvement de travail ou d’E/S sont bloqués (famine). Toutefois, l’augmentation du nombre minimal de threads peut dégrader les performances d’autres manières, par exemple :

  • Le pool de threads peut planifier d’autres threads de travail, même lorsque les threads de travail ne sont pas bloqués. La sursouscription peut retarder considérablement les threads qui sont planifiés, car ils attendent dans une longue file d’attente pour obtenir une autre tranche de temps, ce qui retarde certains éléments ou tâches de travail.
  • Les threads de travail peuvent prendre plus de temps pour le retrait des éléments de travail en raison de la nécessité d’analyser davantage de threads à partir duquel voler le travail.
  • Le basculement de contexte entre les threads peut augmenter l’utilisation du processeur.
  • Le garbage collection peut prendre plus de temps pour le processeur dans la marche à pied de la pile de threads.
  • Le processus peut consommer plus de mémoire.

Attention

L’utilisation de la SetMinThreads méthode pour augmenter le nombre minimal de threads peut entraîner des problèmes de performances comme décrit dans le texte précédent. Dans la plupart des cas, le pool de threads fonctionne mieux avec son propre algorithme pour l’allocation des threads. Réduire le minimum à moins que le nombre de processeurs peut également nuire aux performances.

S’applique à

Voir aussi