ThreadPool.SetMinThreads(Int32, Int32) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
İş parçacığı oluşturma ve yok etme yönetimi için bir algoritmaya geçmeden önce, yeni istekler yapıldıktan sonra iş parçacığı havuzunun isteğe bağlı olarak oluşturduğu iş parçacığı sayısını ayarlar.
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
Parametreler
- workerThreads
- Int32
İş parçacığı havuzunun isteğe bağlı olarak oluşturduğu en az çalışan iş parçacığı sayısı.
- completionPortThreads
- Int32
İş parçacığı havuzunun isteğe bağlı olarak oluşturduğu zaman uyumsuz G/Ç iş parçacığı sayısı alt sınırı.
Döndürülenler
true
değişiklik başarılı olursa; aksi takdirde , false
.
Örnekler
Aşağıdaki örnek, en az çalışan iş parçacığı sayısını dört olarak ayarlar ve en az zaman uyumsuz G/Ç tamamlama iş parçacığı sayısı için özgün değeri korur.
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
Açıklamalar
Windows iş parçacığı havuzu .NET iş parçacığı havuzu yerine kullanılacak şekilde yapılandırıldığında bu yöntem desteklenmez. Daha fazla bilgi için bkz. Windows iş parçacığı havuzu yapılandırma ayarı.
İş parçacığı havuzu, her kategori için minimum değere ulaşana kadar isteğe bağlı yeni çalışan iş parçacıkları veya G/Ç tamamlama iş parçacıkları sağlar. En düşük değere ulaşıldığında, iş parçacığı havuzu bu kategoride ek iş parçacıkları oluşturabilir veya bazı görevlerin tamamlanmasını bekleyebilir. .NET Framework 4'te başlayarak, iş parçacığı havuzu aktarım hızını iyileştirmek için iş parçacıklarını oluşturur ve yok eder. Bu işlem, zaman birimi başına tamamlanan görev sayısı olarak tanımlanır. Çok az iş parçacığı kullanılabilir kaynakları en iyi şekilde kullanmayabilirken, çok fazla iş parçacığı kaynak çekişmesini artırabilir.
Talep düşük olduğunda, gerçek iş parçacığı havuzu iş parçacığı sayısı minimum değerlerin altına düşebilir.
Negatif bir sayı veya en fazla etkin iş parçacığı havuzu iş parçacığı sayısından daha büyük bir sayı belirtirseniz (kullanılarak GetMaxThreadselde edilir), SetMinThreads en düşük değerlerden birini döndürür false
ve değiştirmez.
Varsayılan olarak, en az iş parçacığı sayısı işlemci sayısına ayarlanır. İş parçacığı sayısını en düşük düzeyde artırmak için kullanabilirsiniz SetMinThreads ; örneğin, kuyruğa alınan bazı iş öğelerinin veya görevlerin iş parçacığı havuzu iş parçacıklarını engellemesi sorunları geçici olarak çözmek için kullanabilirsiniz. Bu tıkanıklıklar bazen tüm çalışan veya G/Ç tamamlama iş parçacıklarının engellendiği (yetersizlik) bir duruma yol açar. Ancak, en az iş parçacığı sayısını artırmak aşağıdakiler gibi diğer yollarla performansı düşürebilir:
- İş parçacığı havuzu, çalışan iş parçacıkları engellenmese bile daha fazla çalışan iş parçacığı zamanlayabilir. Fazla abonelik, zamanlanan iş parçacıklarının başka bir zaman dilimi almak için uzun bir kuyrukta beklediklerinden önemli ölçüde geciktirilmesine neden olabilir ve bu da bazı iş öğelerini veya görevleri geciktirebilir.
- çalışan iş parçacıkları, işi çalmak için daha fazla iş parçacığı taramak zorunda olduğundan iş öğelerinin sorgularını kaldırmada daha fazla CPU süresi alabilir.
- İş parçacıkları arasında bağlam geçişi cpu kullanımını artırabilir.
- Atık toplama, iş parçacığı yığınının yürümesinde daha fazla CPU süresi alabilir.
- İşlem daha fazla bellek tüketebilir.
Dikkat
SetMinThreads En az iş parçacığı sayısını artırmak için yönteminin kullanılması, önceki metinde açıklandığı gibi performans sorunlarına neden olabilir. Çoğu durumda iş parçacığı havuzu, iş parçacıklarını ayırmaya yönelik kendi algoritmasıyla daha iyi performans gösterir. En düşük değeri işlemci sayısından daha az olacak şekilde azaltmak da performansı etkileyebilir.