ThreadPool.SetMinThreads(Int32, Int32) Methode

Definition

Legt die Mindestanzahl von Threads fest, die der Threadpool bei Bedarf erstellt, wenn neue Anforderungen gestellt werden, bevor zu einem Algorithmus zum Verwalten von Threaderstellung und -löschung gewechselt wird.

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

Parameter

workerThreads
Int32

Die Mindestanzahl von Arbeitsthreads, die der Threadpool bei Bedarf erstellt.

completionPortThreads
Int32

Die Mindestanzahl von asynchronen E/A-Threads, die der Threadpool bei Bedarf erstellt.

Gibt zurück

true, wenn die Änderung erfolgreich ist, andernfalls false.

Beispiele

Im folgenden Beispiel wird die Mindestanzahl von Arbeitsthreads auf vier festgelegt und der ursprüngliche Wert für die minimale Anzahl von asynchronen E/A-Abschlussthreads beibehalten.

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

Hinweise

Diese Methode wird nicht unterstützt, wenn der Windows-Threadpool für die Verwendung anstelle des .NET-Threadpools konfiguriert ist. Weitere Informationen finden Sie in der Konfigurationseinstellung des Windows-Threadpools.

Der Threadpool stellt bei Bedarf neue Arbeitsthreads oder E/A-Abschlussthreads bereit, bis er das Minimum für jede Kategorie erreicht. Wenn das Minimum erreicht ist, kann der Threadpool zusätzliche Threads in dieser Kategorie erstellen oder warten, bis einige Aufgaben abgeschlossen sind. Ab .NET Framework 4 erstellt und zerstört der Threadpool Threads, um den Durchsatz zu optimieren, der als Anzahl von Aufgaben definiert ist, die pro Zeiteinheit abgeschlossen werden. Bei zu wenigen Threads werden die verfügbaren Ressourcen möglicherweise nicht optimal genutzt, wohingegen bei zu vielen Threads Ressourcenkonflikte auftreten können.

Wenn die Anforderungen niedrig sind, kann die tatsächliche Anzahl der Threads im Threadpool unterhalb der Mindestwerte liegen.

Wenn Sie eine negative Zahl oder eine Zahl angeben, die größer als die maximale Anzahl aktiver Threadpoolthreads (abgerufen mit GetMaxThreads) SetMinThreads ist, gibt einen der Minimalwerte zurück false und ändert sich nicht.

Standardmäßig ist die Mindestanzahl von Threads auf die Prozessoranzahl festgelegt. Sie können verwenden SetMinThreads , um die Mindestanzahl von Threads zu erhöhen, z. B. um vorübergehend Probleme zu umgehen, bei denen einige Arbeitselemente oder Aufgaben Threadpoolthreads blockieren. Diese Blockaden führen manchmal zu einer Situation, in der alle Worker- oder E/A-Abschlussthreads blockiert werden (Hunger). Das Erhöhen der Mindestanzahl von Threads kann jedoch die Leistung auf andere Weise beeinträchtigen, z. B.:

  • Der Threadpool plant möglicherweise mehr Arbeitsthreads, auch wenn die Arbeitsthreads nicht blockiert werden. Die Überzeichnung kann dazu führen, dass Threads, die geplant werden, erheblich verzögert werden, da sie in einer langen Warteschlange warten, um einen anderen Zeitslice zu erhalten, wodurch einige Arbeitselemente oder Aufgaben verzögert werden.
  • Workerthreads benötigen möglicherweise mehr CPU-Zeit beim Aufheben der Warteschlange von Arbeitselementen, da sie mehr Threads scannen müssen, um arbeit zu stehlen.
  • Der Kontextwechsel zwischen Threads kann die CPU-Auslastung erhöhen.
  • Die Garbage Collection kann beim Durchlaufen des Threadstapels mehr CPU-Zeit in Anspruch nehmen.
  • Der Prozess verbraucht möglicherweise mehr Arbeitsspeicher.

Achtung

Wenn Sie die SetMinThreads -Methode verwenden, um die Mindestanzahl von Threads zu erhöhen, kann dies zu Leistungsproblemen führen, wie im vorherigen Text beschrieben. In den meisten Fällen wird der Threadpool mit einem eigenen Algorithmus für die Zuweisung von Threads besser abschneiden. Das Reduzieren des Minimums auf weniger als die Anzahl der Prozessoren kann auch die Leistung beeinträchtigen.

Gilt für:

Weitere Informationen