İş parçacığı oluşturma için çalışma zamanı yapılandırma seçenekleri

Bu makalede, .NET'te iş parçacığını yapılandırmak için kullanabileceğiniz ayarlar ayrıntılı olarak anlatılır.

Not

.NET 6, .NET çalışma zamanı davranışını yapılandıran ortam değişkenleri yerine COMPlus_ ön eki DOTNET_ standartlaştırır. Ancak ön COMPlus_ ek çalışmaya devam eder. .NET çalışma zamanının önceki bir sürümünü kullanıyorsanız, yine de ortam değişkenleri için ön eki kullanmalısınız COMPlus_ .

CPU grupları

  • İş parçacıklarının CPU grupları arasında otomatik olarak dağıtılıp dağıtılmayacağını yapılandırılır.
  • Bu ayarı atlarsanız, iş parçacıkları CPU grupları arasında dağıtılmaz. Bu, değerini 0olarak ayarlamaya eşdeğerdir.
Ayar adı Değerler
runtimeconfig.json Yok Yok
Ortam değişkeni COMPlus_Thread_UseAllCpuGroups veya DOTNET_Thread_UseAllCpuGroups 0 - devre dışı
1 - etkin

Minimum iş parçacıkları

  • Çalışan iş parçacığı havuzu için en az iş parçacığı sayısını belirtir.
  • yöntemine ThreadPool.SetMinThreads karşılık gelir.
Ayar adı Değerler
runtimeconfig.json System.Threading.ThreadPool.MinThreads En az iş parçacığı sayısını temsil eden bir tamsayı
MSBuild özelliği ThreadPoolMinThreads En az iş parçacığı sayısını temsil eden bir tamsayı
Ortam değişkeni Yok Yok

Örnekler

runtimeconfig.json dosyası:

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

Project dosyası:

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

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

</Project>

En fazla iş parçacığı sayısı

  • Çalışan iş parçacığı havuzu için en fazla iş parçacığı sayısını belirtir.
  • yöntemine ThreadPool.SetMaxThreads karşılık gelir.
Ayar adı Değerler
runtimeconfig.json System.Threading.ThreadPool.MaxThreads İş parçacığı sayısı üst sınırını temsil eden bir tamsayı
MSBuild özelliği ThreadPoolMaxThreads İş parçacığı sayısı üst sınırını temsil eden bir tamsayı
Ortam değişkeni Yok Yok

Örnekler

runtimeconfig.json dosyası:

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

Project dosyası:

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

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

</Project>

İş öğelerini engellemeye yanıt olarak iş parçacığı ekleme

Bazı durumlarda, iş parçacığı havuzu iş parçacıklarını engelleyen iş öğelerini algılar. Telafi etmek için daha fazla iş parçacığı ekler. .NET 6+'da, iş öğelerini engellemeye yanıt olarak iş parçacığı eklemeyi yapılandırmak için aşağıdaki çalışma zamanı yapılandırma ayarlarını kullanabilirsiniz. Şu anda, bu ayarlar yalnızca başka bir görevin tamamlanmasını bekleyen iş öğeleri için (örneğin, tipik zaman uyumsuz eşitleme durumlarında) geçerlilik kazanır.

runtimeconfig.json ayar adı Açıklama Sürüm kullanıma sunulmuştur
System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor temel MinThreads alınan iş parçacığı sayısına ulaşıldıktan sonra bu değer (işlemci sayısıyla çarpıldıktan sonra) gecikme olmadan kaç ek iş parçacığı oluşturulabileceğini belirtir. .NET 6
System.Threading.ThreadPool.Blocking.ThreadsPerDelayStep_ProcCountFactor temelinde ThreadsToAddWithoutDelay iş parçacığı sayısına ulaşıldıktan sonra, bu değer (işlemci sayısıyla çarpıldıktan sonra), her yeni iş parçacığı oluşturulmadan önce gecikmeye kaç iş parçacığı DelayStepMs ekleneceğini belirtir. .NET 6
System.Threading.ThreadPool.Blocking.DelayStepMs temel alan ThreadsToAddWithoutDelay iş parçacığı sayısına ulaşıldıktan sonra bu değer, her iş parçacığı oluşturulmadan önce uygulanacak iş parçacığı başına ThreadsPerDelayStep ne kadar ek gecikme ekleneceğini belirtir. .NET 6
System.Threading.ThreadPool.Blocking.MaxDelayMs temel ThreadsToAddWithoutDelay alan iş parçacığı sayısına ulaşıldıktan sonra, bu değer her yeni iş parçacığı oluşturulmadan önce kullanılacak maksimum gecikmeyi belirtir. .NET 6
System.Threading.ThreadPool.Blocking.IgnoreMemoryUsage Varsayılan olarak, engellemeye yanıt olarak iş parçacığı ekleme hızı yeterli fiziksel bellek olup olmadığını belirleyen buluşsal yöntemlerle sınırlıdır. Bazı durumlarda, düşük bellekli durumlarda bile iş parçacıklarını daha hızlı eklemek tercih edilebilir. Bu anahtarı kapatarak bellek kullanımı buluşsal özelliklerini devre dışı bırakabilirsiniz. .NET 7

Yapılandırma ayarları nasıl geçerlilik kazanır?

  • temel MinThreads alan iş parçacığı sayısına ulaşıldıktan sonra, gecikme olmadan en fazla ThreadsToAddWithoutDelay ek iş parçacığı oluşturulabilir.
  • Bundan sonra, her ek iş parçacığı oluşturulmadan önce ile başlayan DelayStepMsbir gecikme oluşur.
  • Gecikmeli olarak eklenen her ThreadsPerDelayStep iş parçacığı için gecikmeye bir ek DelayStepMs eklenir.
  • Gecikme aşılamayabilir MaxDelayMs.
  • Gecikmeler yalnızca iş parçacıkları oluşturulmadan önce tetiklenir. İş parçacıkları zaten kullanılabilir durumdaysa, engelleyici iş öğelerini telafi etmek için gecikme olmadan serbest bırakılırlar.
  • Fiziksel bellek kullanımı ve sınırları da kullanılır ve bir eşiğin ötesinde sistem daha yavaş iş parçacığı eklemeye geçer.

Örnekler

runtimeconfig.json dosyası:

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

AutoreleasePool yönetilen iş parçacıkları için

Bu seçenek, desteklenen bir macOS platformunda çalışırken her yönetilen iş parçacığının örtük bir NSAutoreleasePool alıp almayacağını yapılandırıyor.

Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.Threading.Thread.EnableAutoreleasePool true veya false .NET 6
MSBuild özelliği AutoreleasePoolSupport true veya false .NET 6
Ortam değişkeni Yok Yok Yok

Örnekler

runtimeconfig.json dosyası:

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

Project dosyası:

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

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

</Project>