Количество потоков в C # - PullRequest
5 голосов
/ 27 апреля 2011

Каким будет правильный способ установки ThreadPool в C#?

ThreadPool.SetMaxThreads(int workerThreads, int completionPortThreads)

Я хочу, чтобы количество потоков было равно числу ядер процессора, но я не уверен насчетасинхронные потоки ввода / вывода (второй параметр).

Можно ли просто сказать что-то вроде ThreadPool.SetMaxThreads(Environment.ProcessorCount, 0), чтобы O / S выводил сам второй параметр?

1 Ответ

6 голосов
/ 27 апреля 2011

Максимальный поток портов завершения используется асинхронными задачами, такими как Socket.Begin* или Socket.*Async и другими задачами, связанными с вводом-выводом. Я бы порекомендовал, если вы измените рабочие потоки, то вам следует просто проверить, каково текущее максимальное количество потоков завершения, прежде чем изменять значения:

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.

...