Это не обязательно так просто, как использование пула потоков.
По умолчанию пул потоков выделяет несколько потоков для каждого ЦП. Поскольку каждый поток, участвующий в выполняемой вами работе, имеет свою стоимость (накладные расходы на переключение задач, использование очень ограниченного кэш-памяти L1, L2 и, возможно, L3 и т. Д.), Оптимальное количество используемых потоков - <= количество доступных процессоров - если каждый поток не запрашивает сервисы от других машин - например, веб-сервис с высокой степенью масштабируемости. В некоторых случаях, особенно в тех, которые требуют больше чтения и записи на жестком диске, чем нагрузки на процессор, на самом деле лучше иметь 1 поток, чем несколько потоков. </p>
Для большинства приложений, и, конечно, для кодирования WAV и MP3, вы должны ограничить количество рабочих потоков количеством доступных процессоров. Вот код C # для определения количества процессоров:
int processors = 1;
string processorsStr = System.Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS");
if (processorsStr != null)
processors = int.Parse(processorsStr);
К сожалению, это не так просто, как ограничить себя количеством процессоров. Вы также должны принять во внимание производительность контроллера (ов) жесткого диска и дисков.
Единственный способ найти оптимальное количество потоков - это пробная ошибка. Это особенно верно, когда вы используете жесткие диски, веб-сервисы и тому подобное. С жесткими дисками вам лучше не использовать все четыре процессора на вашем четырехъядерном процессоре. С другой стороны, с некоторыми веб-сервисами вам может быть лучше сделать 10 или даже 100 запросов на процессор.