ThreadPool.SetMinThreads(Int32, Int32) Metoda

Definice

Nastaví minimální počet vláken vytvořených fondem vláken na vyžádání při vytváření nových požadavků před přepnutím na algoritmus pro správu vytváření a zničení vláken.

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 vláken dokončení vstupně-výstupních operací.

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

Poznámky

Tato metoda není podporována, pokud je fond vláken Systému Windows nakonfigurován tak, aby se používal místo fondu vláken .NET. Další informace najdete v nastavení konfigurace fondu vláken Windows.

Fond vláken poskytuje nová pracovní vlákna nebo vlákna pro dokončování vstupně-výstupních operací na vyžádání, dokud nedosáhne minimální hodnoty pro každou kategorii. Po dosažení minima může fond vláken vytvořit další vlákna v dané kategorii nebo počkat na dokončení některých úloh. Počínaje rozhraním .NET Framework 4 fond vláken vytváří a ničí vlákna za účelem optimalizace propustnosti, která je definována jako počet úkolů, které se dokončí 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 kolize prostředků.

Pokud je poptávka nízká, skutečný počet vláken fondu vláken může klesnout pod minimální hodnoty.

Pokud zadáte záporné číslo nebo číslo větší než maximální počet aktivních vláken fondu vláken (získaný pomocí GetMaxThreads), SetMinThreads vrátí false a 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 nebo úkoly ve frontě blokují vlákna fondu vláken. Tyto blokování někdy vedou k situaci, kdy jsou zablokovaná všechna vlákna dokončení pracovních procesů nebo vstupně-výstupních operací (hladovění). Zvýšení minimálního počtu vláken však 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ž se pracovní vlákna neblokují. Oversubscription může způsobit, že vlákna, která jsou naplánovaná, budou výrazně zpožděna, protože čekají v dlouhé frontě na získání dalšího časového řezu, a zpozdí některé pracovní položky nebo úkoly.
  • Pracovní vlákna můžou trvat delší dobu procesoru při odstraňování pracovních položek z důvodu nutnosti prohledávat více vláken, aby se zcizila práce.
  • 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 při procházení zásobníku vláken.
  • Proces může spotřebovávat více paměti.

Upozornění

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í minima na méně než počet procesorů může také poškodit výkon.

Platí pro

Viz také