ThreadPool.SetMinThreads(Int32, Int32) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Legt die Mindestanzahl der Threads fest, die der Threadpool bei Bedarf erstellt, da neue Anforderungen vorgenommen werden, bevor sie zu einem Algorithmus für die Verwaltung der Threaderstellung und -zerstörung wechseln.
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 der Arbeitsthreads, die der Threadpool bei Bedarf erstellt.
- completionPortThreads
- Int32
Die Mindestanzahl asynchroner E/A-Threads, die der Threadpool bei Bedarf erstellt.
Gibt zurück
truewenn die Änderung erfolgreich ist; andernfalls . false
Beispiele
Im folgenden Beispiel wird die Mindestanzahl der Arbeitsthreads auf vier festgelegt und der ursprüngliche Wert für die minimale Anzahl asynchroner E/A-Vervollständigungsthreads beibehalten.
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 für den Windows-Threadpool.
Der Threadpool stellt neue Arbeitsthreads oder E/A-Vervollständigungsthreads bei Bedarf 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 dem .NET Framework 4 erstellt und zerstört der Threadpool Threads, um den Durchsatz zu optimieren, der als die Anzahl der 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 ist als die maximale Anzahl aktiver Threadpoolthreads (abgerufen mit GetMaxThreads), SetMinThreadsfalse gibt zurück und ändert keines der Minimalwerte.
Standardmäßig ist die Mindestanzahl von Threads auf die Prozessoranzahl festgelegt. Sie können SetMinThreads verwenden, um die Mindestanzahl an Threads zu erhöhen, um beispielsweise vorübergehend Probleme zu umgehen, bei denen einige Arbeitsaufgaben oder Aufgaben in der Warteschlange Thread-Pool-Threads blockieren. Diese Blockaden führen manchmal zu einer Situation, in der alle Worker- oder I/O-Completion-Threads blockiert sind (Verhungern). Wenn Sie jedoch die Minimale Anzahl von Threads erhöhen, kann die Leistung auf andere Weise beeinträchtigt werden, z. B.:
- Der Threadpool kann weitere Arbeitsthreads planen, auch wenn die Arbeitsthreads nicht blockiert werden. Die Überschreibung kann dazu führen, dass Threads, die geplant werden, erheblich verzögert werden, während sie in einer langen Warteschlange warten, um ein weiteres Zeitsegment zu erhalten und einige Arbeitsaufgaben oder Aufgaben zu verzögern.
- Arbeitsthreads können mehr CPU-Zeit in der Entqueuierung von Arbeitsaufgaben in Anspruch nehmen, da mehr Threads durchsucht werden müssen, um Arbeit zu stehlen.
- Der Kontextwechsel zwischen Threads kann die CPU-Auslastung erhöhen.
- Die Garbage Collection kann mehr CPU-Zeit in Threadstapel-Walking dauern.
- Der Prozess verbraucht möglicherweise mehr Arbeitsspeicher.
Vorsicht
Die Verwendung der SetMinThreads Methode zum Erhöhen der Mindestanzahl von Threads kann zu Leistungsproblemen führen, wie im vorherigen Text beschrieben. In den meisten Fällen wird der Threadpool besser mit seinem eigenen Algorithmus zum Zuordnen von Threads ausgeführt. Eine Reduzierung des Minimums auf weniger als die Anzahl der Prozessoren kann auch die Leistung beeinträchtigen.