Sdílet prostřednictvím


Možnosti konfigurace modulu runtime pro podprocesy

Tento článek podrobně popisuje nastavení, která můžete použít ke konfiguraci podprocesů v .NET.

Použití všech skupin procesoru ve Windows

  • Na počítačích s více skupinami procesoru toto nastavení konfiguruje, jestli komponenty, jako je fond vláken, používají všechny skupiny procesoru nebo pouze primární skupinu procesoru procesu. Nastavení také ovlivňuje, co Environment.ProcessorCount se vrátí.
  • Pokud je toto nastavení povolené, použijí se všechny skupiny procesoru a vlákna se automaticky distribuují také mezi skupiny procesoru .
  • Toto nastavení je ve výchozím nastavení povolené ve Windows 11 a novějších verzích a ve výchozím nastavení je zakázané ve Windows 10 a starších verzích. Aby se toto nastavení projevilo, pokud je povoleno, musí být uvolňování paměti také nakonfigurováno tak, aby používalo všechny skupiny procesoru; Další informace naleznete v tématu Skupiny procesoru uvolňování paměti.
Název položky nastavení Hodnoty
runtimeconfig.json N/A N/A
Proměnná prostředí DOTNET_Thread_UseAllCpuGroups 0 -invalidní
1 -zpřístupněný

Přiřazení vláken ke skupinám procesoru ve Windows

  • Na počítačích s více skupinami procesoru a všechny skupiny procesorů se toto nastavení konfiguruje, jestli se vlákna automaticky distribuují napříč skupinami procesoru.
  • Pokud je toto nastavení povolené, přiřadí se nová vlákna ke skupině procesoru způsobem, který se pokusí plně naplnit skupinu procesoru, která je již používána před použitím nové skupiny procesoru.
  • Toto nastavení je standardně zapnuté.
Název položky nastavení Hodnoty
runtimeconfig.json N/A N/A
Proměnná prostředí DOTNET_Thread_AssignCpuGroups 0 -invalidní
1 -zpřístupněný

Minimální počet vláken

Název položky nastavení Hodnoty
runtimeconfig.json System.Threading.ThreadPool.MinThreads Celé číslo představující minimální počet vláken
Vlastnost MSBuild ThreadPoolMinThreads Celé číslo představující minimální počet vláken
Proměnná prostředí N/A N/A

Examples

runtimeconfig.json soubor:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Threading.ThreadPool.MinThreads": 4
      }
   }
}

runtimeconfig.template.json soubor:

{
   "configProperties": {
      "System.Threading.ThreadPool.MinThreads": 4
   }
}

Soubor projektu:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <ThreadPoolMinThreads>4</ThreadPoolMinThreads>
  </PropertyGroup>

</Project>

Maximální počet vláken

Název položky nastavení Hodnoty
runtimeconfig.json System.Threading.ThreadPool.MaxThreads Celé číslo představující maximální počet vláken
Vlastnost MSBuild ThreadPoolMaxThreads Celé číslo představující maximální počet vláken
Proměnná prostředí N/A N/A

Examples

runtimeconfig.json soubor:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Threading.ThreadPool.MaxThreads": 20
      }
   }
}

runtimeconfig.template.json soubor:

{
   "configProperties": {
      "System.Threading.ThreadPool.MaxThreads": 20
   }
}

Soubor projektu:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <ThreadPoolMaxThreads>20</ThreadPoolMaxThreads>
  </PropertyGroup>

</Project>

Fond vláken Windows

  • U projektů ve Windows konfiguruje, zda je správa vláken fondu vláken delegována do fondu vláken Systému Windows.
  • Pokud toto nastavení vynecháte nebo platforma není Windows, použije se místo toho fond vláken .NET.
  • Ve výchozím nastavení používají fond vláken Systému Windows publikované pouze aplikace publikované s nativní AOT ve Windows, pro které se místo toho můžete rozhodnout použít fond vláken .NET zakázáním nastavení konfigurace.
  • Fond vláken Windows může v některých případech fungovat lépe, například v případech, kdy je minimální počet vláken nakonfigurovaný na vysokou hodnotu nebo když fond vláken Windows už aplikaci silně využívá. V případech, kdy fond vláken .NET funguje lépe, například při náročném zpracování vstupně-výstupních operací na větších počítačích. Při změně tohoto nastavení konfigurace doporučujeme zkontrolovat metriky výkonu.
  • Některá rozhraní API nejsou podporována při použití fondu vláken systému Windows, například ThreadPool.SetMinThreads, ThreadPool.SetMaxThreadsa ThreadPool.BindHandle(SafeHandle). Nastavení konfigurace fonduvlákench Alternativou ThreadPool.BindHandle(SafeHandle)ThreadPoolBoundHandle je třída.
Název položky nastavení Hodnoty Verze byla představena
runtimeconfig.json System.Threading.ThreadPool.UseWindowsThreadPool true -zpřístupněný
false -invalidní
.NET 8
Vlastnost MSBuild UseWindowsThreadPool true -zpřístupněný
false -invalidní
.NET 8
Proměnná prostředí DOTNET_ThreadPool_UseWindowsThreadPool 1 -zpřístupněný
0 -invalidní
.NET 8

Examples

runtimeconfig.json soubor:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Threading.ThreadPool.UseWindowsThreadPool": true
      }
   }
}

runtimeconfig.template.json soubor:

{
   "configProperties": {
      "System.Threading.ThreadPool.UseWindowsThreadPool": true
   }
}

Soubor projektu:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <UseWindowsThreadPool>true</UseWindowsThreadPool>
  </PropertyGroup>

</Project>

Injektáž vlákna v reakci na blokování pracovních položek

V některých případech fond vláken detekuje pracovní položky, které blokují jeho vlákna. Aby se kompenzovala, vloží více vláken. V rozhraní .NET 6 nebo novějších můžete pomocí následujících nastavení konfigurace modulu runtime nakonfigurovat injektáž vlákna v reakci na blokování pracovních položek. V současné době se tato nastavení projeví jenom u pracovních položek, které čekají na dokončení jiného úkolu, například v typických asynchronních případech synchronizace .

název nastaveníruntimeconfig.json Description Verze byla představena
System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor Po dosažení počtu MinThreads vláken určuje tato hodnota (po vynásobení počtem procesorů), kolik dalších vláken může být vytvořeno bez zpoždění. .NET 6
System.Threading.ThreadPool.Blocking.ThreadsPerDelayStep_ProcCountFactor Po dosažení počtu ThreadsToAddWithoutDelay vláken určuje tato hodnota (po vynásobení počtem procesorů) po přidání dalších DelayStepMs vláken do zpoždění před vytvořením každého nového vlákna. .NET 6
System.Threading.ThreadPool.Blocking.DelayStepMs Po dosažení počtu vláken určuje ThreadsToAddWithoutDelay tato hodnota další zpoždění přidání na ThreadsPerDelayStep vlákna, které by se použilo před vytvořením každého nového vlákna. .NET 6
System.Threading.ThreadPool.Blocking.MaxDelayMs Po dosažení počtu ThreadsToAddWithoutDelay vláken určuje tato hodnota maximální prodlevu, která se má použít před vytvořením každého nového vlákna. .NET 6
System.Threading.ThreadPool.Blocking.IgnoreMemoryUsage Ve výchozím nastavení je míra injektáže vlákna v reakci na blokování omezena heuristiky, které určují, zda je k dispozici dostatek fyzické paměti. V některých situacích může být vhodnější vložit vlákna rychleji i v situacích s nedostatkem paměti. Heuristika využití paměti můžete zakázat vypnutím tohoto přepínače. .NET 7

Jak se nastavení konfigurace projeví

  • Po dosažení počtu MinThreads vláken je možné vytvořit až ThreadsToAddWithoutDelay další vlákna bez zpoždění.
  • Potom se před vytvořením každého dalšího vlákna vyvolá zpoždění počínaje DelayStepMs.
  • Pro všechna ThreadsPerDelayStep vlákna přidaná se zpožděním přidá další DelayStepMs .
  • Zpoždění nesmí překročit MaxDelayMs.
  • Zpoždění jsou vyvolána pouze před vytvořením vláken. Pokud už jsou vlákna dostupná, uvolní se bez zpoždění, aby se kompenzuje blokování pracovních položek.
  • Používají se také fyzické využití a limity fyzické paměti a systém se přepne na pomalejší injektáž vláken.

Examples

runtimeconfig.json soubor:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor": 5
      }
   }
}

runtimeconfig.template.json soubor:

{
   "configProperties": {
      "System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor": 5
   }
}

AutoreleasePool pro spravovaná vlákna

Tato možnost konfiguruje, jestli každé spravované vlákno obdrží implicitní NSAutoreleasePool při spuštění na podporované platformě macOS.

Název položky nastavení Hodnoty Verze byla představena
runtimeconfig.json System.Threading.Thread.EnableAutoreleasePool true nebo false .NET 6
Vlastnost MSBuild AutoreleasePoolSupport true nebo false .NET 6
Proměnná prostředí N/A N/A N/A

Examples

runtimeconfig.json soubor:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Threading.Thread.EnableAutoreleasePool": true
      }
   }
}

runtimeconfig.template.json soubor:

{
   "configProperties": {
      "System.Threading.Thread.EnableAutoreleasePool": true
   }
}

Soubor projektu:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <AutoreleasePoolSupport>true</AutoreleasePoolSupport>
  </PropertyGroup>

</Project>