5
在C#
中設置ThreadPool
的適當方法是什麼?我想要的線程數量等於處理器內核的數量,但我不確定異步I/O線程(第二個參數)。C#線程數
我可以簡單地說一些像ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)
這樣的O/S本身推導出第二個參數嗎?
在C#
中設置ThreadPool
的適當方法是什麼?我想要的線程數量等於處理器內核的數量,但我不確定異步I/O線程(第二個參數)。C#線程數
我可以簡單地說一些像ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0)
這樣的O/S本身推導出第二個參數嗎?
的最大完成端口線程由異步的任務,如Socket.Begin*
或Socket.*Async
和其它IO相關的任務使用。我會建議,如果你改變了工作線程,那麼你應該檢查什麼是完成線程的當前的最大號碼之前更改值:
int maxWorkerThreads;
int maxCompletionThreads;
// Get the maximum number of completion threads
ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionThreads);
// Set the new max worker threads, but keep the old max completion threads
ThreadPool.SetMaxThreads(someDifferentValue, maxCompletionThreads);
我認爲,在默認情況下完成的最大線程數是1000,但這可能因機器而異。爲了安全起見,請使用從GetMaxThreads
函數獲得的值。
你爲什麼要這樣做?線程池*已經*根據它運行的機器爲你優化了它的大小 - 我認爲你可以做得更好。 – BrokenGlass 2011-04-26 22:38:44
@BrokenGlass同意。但是,例如,如果我必須將最大線程數更改爲'something!= core count',那麼我應該如何處理第二個參數呢? – 2011-04-26 22:39:41