ThreadPool.SetMinThreads(Int32, Int32) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
設定執行緒池在新請求時需產生的最低執行緒數,然後切換至管理執行緒建立與銷毀的演算法。
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
參數
- workerThreads
- Int32
執行緒池按需產生的最少工作執行緒數。
- completionPortThreads
- Int32
執行緒池按需產生的最低非同步 I/O 執行緒數。
傳回
true若變更成功;否則,。 false
範例
以下範例將工作執行緒的最小數設為四個,並保留非同步 I/O 完成執行緒數量的原始值。
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
備註
當 Windows 執行緒池被設定為取代 .NET 執行緒池時,此方法不被支援。 更多資訊請參閱 Windows 執行緒池設定。
執行緒池會依需求提供新的工作執行緒或 I/O 完成執行緒,直到達到每個類別的最低值。 當達到最低值時,執行緒池可以在該類別中新增執行緒,或等待某些任務完成。 從 .NET Framework 4 開始,執行緒池負責建立與銷毀執行緒,以優化吞吐量,吞吐量定義為單位時間內完成的任務數量。 線程太少可能無法充分利用可用的資源,而太多線程可能會增加資源爭用。
當需求很低時,線程集區線程的實際數目可能會低於最小值。
如果你指定負數或大於最大活躍執行緒池執行緒數(使用 GetMaxThreads), SetMinThreads 則返回 false 且不會改變任何最小值。
預設情況下,執行緒的最小數量會設定為處理器數量。 你可以用 SetMinThreads 來增加執行緒的最低數量,例如暫時避開某些排隊工作項目或任務阻塞執行緒池執行緒的問題。 這些阻塞有時會導致所有工作者或 I/O 完成執行緒被阻塞(飢餓)。 然而,增加執行緒數量可能會以其他方式降低效能,例如:
- 執行緒池可能會排程更多工作執行緒,即使工作執行緒沒有被阻塞。 過度訂閱可能導致排程延遲的執行緒,因為他們在長隊等待下一個時間片,導致部分工作項目或任務延遲。
- 工作執行緒在排隊工作項目時可能花費更多 CPU 時間,因為必須掃描更多執行緒來竊取工作。
- 執行緒間的上下文切換可能會增加 CPU 使用率。
- 垃圾回收在執行緒堆疊行走時可能會佔用更多 CPU 時間。
- 此程序可能會消耗更多記憶體。
Caution
使用此 SetMinThreads 方法增加執行緒最小數量可能會引發如前述所述的效能問題。 在大多數情況下,執行緒池若有自己的演算法分配執行緒,表現會更好。 將最小處理器數量減少到少於處理器數量,也會損害效能。