Размер пула потоков для сетевых задач - PullRequest
2 голосов
/ 15 июля 2009

Каковы основные правила определения размера пула потоков, который содержит задачи, которые:

  • всегда связаны с сетью;
  • доступ к внешним службам с различной пропускной способностью и задержкой.

Моя главная задача - оптимальное использование полосы пропускания (, т.е. не обрабатывать задачи последовательно, но и не открывать 1200 сетевых подключений);

Ответы [ 2 ]

1 голос
/ 15 июля 2009

Ваш доступ к сети является синхронным или асинхронным?

Если ваш доступ к сети и обработка запросов асинхронны, тогда размер пула потоков может быть => Количество доступных ядер + 1.

ОБНОВЛЕНИЕ: Под доступными ядрами я подразумеваю количество физических процессоров, доступных в системе. Пул потоков требуется даже для сервера, использующего асинхронный ввод-вывод, чтобы использовать преимущества нескольких физических процессоров.

Если доступ к сети и обработка запросов выполняются синхронно, то нет строгого правила для определения размера пула потоков. В этом случае всегда лучше настроить размер пула потоков. Оценка значения по умолчанию, учитывая, что обработка вашего запроса не привязана к ЦП, может быть:

(Задержка обработки запроса / Сетевая задержка) * (Количество доступных ядер + 1) с максимальным значением 4 * Количество доступных ядер.

0 голосов
/ 13 июля 2010

Я не эксперт, но разве у вас не должно быть одного потока на задачу? Потоки будут блокировать / опрашивать, пока данные не будут доступны. Если вы ожидаете соединения, тогда запустите поток для обработки каждого соединения в обработчике соединений.

...