ThreadPool.SetMinThreads(Int32, Int32) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Nastaví minimální počet vláken, která fond vláken vytvoří na vyžádání, protože se vytvoří nové požadavky, a teprve potom přejdete na algoritmus pro správu vytváření a zničení vlákna.
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
Minimální počet pracovních vláken, která fond vláken vytvoří na vyžádání.
- completionPortThreads
- Int32
Minimální počet asynchronních vstupně-výstupních vláken, která fond vláken vytvoří na vyžádání.
Návraty
truepokud je změna úspěšná; v opačném případě . false
Příklady
Následující příklad nastaví minimální počet pracovních vláken na čtyři a zachová původní hodnotu pro minimální počet asynchronních vstupně-výstupních vláken dokončení.
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
Poznámky
Tato metoda není podporována, pokud je fond vláken Systému Windows nakonfigurovaný tak, aby se používal místo fondu vláken .NET. Další informace naleznete v nastavení konfigurace fondu vláken systému Windows.
Fond vláken poskytuje nová pracovní vlákna nebo vlákna dokončení vstupně-výstupních operací na vyžádání, dokud nedosáhne minimální hodnoty pro každou kategorii. Po dosažení minimálního počtu vláken může fond vláken vytvořit další vlákna v dané kategorii nebo počkat na dokončení některých úloh. Od .NET Framework 4 fond vláken vytvoří a zničí vlákna, aby se optimalizovala propustnost, která je definována jako počet úloh, které se dokončily za jednotku času. Příliš málo vláken nemusí optimálně využívat dostupné prostředky, zatímco příliš mnoho vláken může zvýšit soutěžení o prostředky.
Pokud je poptávka nízká, skutečný počet vláken fondu může spadat pod minimální hodnoty.
Pokud zadáte záporné číslo nebo číslo větší než maximální počet vláken fondu aktivních vláken (získané pomocí GetMaxThreads), SetMinThreads vrátí a false nezmění ani jednu z minimálních hodnot.
Ve výchozím nastavení je minimální počet vláken nastaven na počet procesorů. Můžete použít SetMinThreads ke zvýšení minimálního počtu vláken, například k dočasnému řešení problémů, kdy některé pracovní položky ve frontě nebo úlohy blokují vlákna fondu vláken. Tyto blokace někdy vedou k situaci, kdy jsou blokovaná všechna vlákna dokončení pracovního procesu nebo vstupně-výstupních operací (hladovění). Zvýšení minimálního počtu vláken ale může snížit výkon jinými způsoby, například:
- Fond vláken může naplánovat více pracovních vláken, i když pracovní vlákna nejsou blokována. Oversubscription může způsobit, že vlákna, která se plánují, se výrazně zpozdí, protože čekají v dlouhé frontě, aby získaly další časový řez, zpozdily některé pracovní položky nebo úkoly.
- Pracovní vlákna mohou trvat více času procesoru při vyřazení pracovních položek z důvodu nutnosti prohledávat více vláken, aby ukradli práci.
- Přepínání kontextu mezi vlákny může zvýšit využití procesoru.
- Uvolňování paměti může trvat více času procesoru v zásobníku vláken chůze.
- Proces může spotřebovávat více paměti.
Caution
SetMinThreads Použití metody ke zvýšení minimálního počtu vláken může způsobit problémy s výkonem, jak je popsáno v předchozím textu. Ve většině případů bude fond vláken fungovat lépe s vlastním algoritmem pro přidělování vláken. Snížení minimálního na méně než počet procesorů může také snížit výkon.