ThreadPool.SetMinThreads(Int32, Int32) 方法

定義

設定執行緒池在新請求時需產生的最低執行緒數,然後切換至管理執行緒建立與銷毀的演算法。

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 方法增加執行緒最小數量可能會引發如前述所述的效能問題。 在大多數情況下,執行緒池若有自己的演算法分配執行緒,表現會更好。 將最小處理器數量減少到少於處理器數量,也會損害效能。

適用於

另請參閱