ThreadPool.SetMinThreads(Int32, Int32) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Ustawia minimalną liczbę wątków tworzonych przez pulę wątków na żądanie, gdy są wykonywane nowe żądania, przed przełączeniem do algorytmu zarządzania tworzeniem i niszczeniem wątków.
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
Parametry
- workerThreads
- Int32
Minimalna liczba wątków roboczych tworzonych przez pulę wątków na żądanie.
- completionPortThreads
- Int32
Minimalna liczba asynchronicznych wątków we/wy tworzonych na żądanie przez pulę wątków.
Zwraca
true
jeśli zmiana zakończy się pomyślnie; w przeciwnym razie , false
.
Przykłady
Poniższy przykład ustawia minimalną liczbę wątków roboczych na cztery i zachowuje oryginalną wartość dla minimalnej liczby asynchronicznych wątków uzupełniania we/wy.
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
Uwagi
Ta metoda nie jest obsługiwana, gdy pula wątków systemu Windows jest skonfigurowana do użycia zamiast puli wątków platformy .NET. Aby uzyskać więcej informacji, zobacz ustawienie konfiguracji puli wątków systemu Windows.
Pula wątków udostępnia nowe wątki robocze lub wątki uzupełniania we/wy na żądanie, dopóki nie osiągnie minimum dla każdej kategorii. Po osiągnięciu minimum pula wątków może utworzyć dodatkowe wątki w tej kategorii lub poczekać na ukończenie niektórych zadań. Począwszy od .NET Framework 4, pula wątków tworzy i niszczy wątki w celu zoptymalizowania przepływności, która jest definiowana jako liczba zadań, które są wykonywane na jednostkę czasu. Zbyt mało wątków może nie zapewnić optymalnego wykorzystania dostępnych zasobów, podczas gdy zbyt wiele wątków może zwiększyć rywalizację o zasoby.
Gdy zapotrzebowanie jest niskie, rzeczywista liczba wątków puli wątków może spaść poniżej wartości minimalnych.
Jeśli określisz liczbę ujemną lub liczbę większą niż maksymalna liczba wątków aktywnych wątków (uzyskanych przy użyciu GetMaxThreads), SetMinThreads zwraca false
wartość i nie zmienia żadnej z wartości minimalnych.
Domyślnie minimalna liczba wątków jest ustawiona na liczbę procesorów. Możesz użyć SetMinThreads polecenia , aby zwiększyć minimalną liczbę wątków, na przykład w celu tymczasowego obejścia problemów, w których niektóre elementy robocze w kolejce lub zadania blokują wątki puli wątków. Te blokady czasami prowadzą do sytuacji, w której wszystkie wątki ukończenia procesu roboczego lub we/wy są blokowane (głodowanie). Jednak zwiększenie minimalnej liczby wątków może obniżyć wydajność na inne sposoby, takie jak:
- Pula wątków może planować więcej wątków roboczych, nawet jeśli wątki robocze nie są blokowane. Nadsubskrypcja może spowodować znaczne opóźnienie wątków, które mają być znacznie opóźnione, ponieważ oczekują w długiej kolejce, aby uzyskać inny wycinek czasu, opóźniając niektóre elementy robocze lub zadania podrzędne.
- Wątki robocze mogą trwać dłużej niż w przypadku usuwania elementów roboczych z kolejki z powodu konieczności skanowania większej liczby wątków w celu kradzieży pracy.
- Przełączanie kontekstu między wątkami może zwiększyć użycie procesora CPU.
- Odzyskiwanie pamięci może zająć więcej czasu procesora CPU w przechodzeniu stosu wątku.
- Proces może zużywać więcej pamięci.
Przestroga
SetMinThreads Użycie metody w celu zwiększenia minimalnej liczby wątków może powodować problemy z wydajnością, zgodnie z opisem w poprzednim tekście. W większości przypadków pula wątków będzie działać lepiej przy użyciu własnego algorytmu przydzielania wątków. Zmniejszenie wartości minimalnej do mniejszej niż liczba procesorów może również zaszkodzić wydajności.
Dotyczy
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla