Sdílet prostřednictvím


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á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 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 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 minima 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 kolizí 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 ve frontě nebo úkoly 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, a to i v případě, že pracovní vlákna nejsou blokována. Nadměrné předplatné může způsobit, že vlákna, která se plánují, se výrazně zpozdí, protože čekají v dlouhé frontě na získání dalšího časového řezu, což zpozdí některé pracovní položky nebo úkoly.
  • Pracovní vlákna mohou trvat více času procesoru při odstraňování pracovních položek z fronty, protože je nutné prohledávat více vláken, aby se odcizila práce.
  • Přepínání kontextu mezi vlákny může zvýšit využití procesoru.
  • Uvolňování paměti může při procházení zásobníku vláken trvat více času procesoru.
  • 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ž je počet procesorů, může také snížit výkon.

Platí pro

Viz také