Важно понимать цель использования нескольких потоков на сервере; многие потоки на сервере служат для уменьшения задержки , а не для увеличения скорости. Вы не делаете процессор более быстрым, имея больше потоков, но вы повышаете вероятность того, что поток всегда будет появляться в течение определенного периода для обработки запроса.
Наличие множества потоков, которые просто перемещают данные параллельно, является довольно неэффективным средством для выстрела (создание одного потока на запрос, естественно, просто терпит неудачу полностью). Использование шаблона пула потоков может быть более эффективным, целенаправленным подходом к уменьшению задержки.
Теперь в пуле потоков вы хотите иметь как минимум столько же потоков, сколько у вас процессоров / ядер. Вы можете иметь больше, чем это, но дополнительные потоки снова только уменьшат задержку и не увеличат скорость.
Думайте о проблеме организации серверных потоков, как о организации линии на супермаркете. Хотели бы вы иметь много кассиров, которые работают медленнее, или одного кассира, который работает очень быстро? Проблема быстрого кассира заключается не в скорости, а в том, что один клиент с большим количеством продуктов может по-прежнему занимать много времени. Потребность во многих потоках исходит из того, что несколько запросов потребуют много времени и заблокируют все ваши потоки. Исходя из этого, то, выиграете ли вы от многих более медленных кассиров, зависит от того, есть ли у вас одинаковое количество продуктов или дико разные цифры. Возвращаясь к базовой модели, это означает, что вы должны поиграть с номером потока, чтобы выяснить, что является оптимальным с учетом конкретных характеристик вашего трафика, и посмотреть, сколько времени уходит на обработку каждого запроса.