Является ли хорошей идеей совместное использование пула потоков TBB с HTTP-сервером? - PullRequest
0 голосов
/ 24 апреля 2020

Я знаю, что это странный вопрос, но выслушай меня. Я работаю над высокой пропускной способностью, вычислять тяжелый внутренний сервер HTTP в C ++. Это довольно просто:

  1. Раскручивает HTTP-сервер
  2. Получите некоторый запрос
  3. Делайте много математики
    • Этот шаг распараллелен использование TBB
  4. Отправить результат обратно (занимает около 20 мс)
  5. Нет ограничений на то, как скоро должен получиться ответ. Но чем меньше наихудший случай, тем лучше.

Теперь мое узкое место в серверной части использует пул потоков, отличный от TBB. Таким образом, когда TBB занят, занимаясь математикой. Сервер может внезапно получить десятки новых запросов, затем поток со стороны сервера будет запланирован, что приведет к большим ошибкам кэша и ошибкам прогнозирования ветвлений.

Решение, которое я нашел, состоит в том, чтобы разделить пул потоков TBB с сервером. Тогда никакой запрос не будет зарегистрирован, пока TBB занят и обрабатывается сразу после освобождения TBB.

Это хорошая идея? Или это может иметь потенциальные проблемы?

1 Ответ

0 голосов
/ 24 апреля 2020

Трудно ответить, не зная, что делает этот пул потоков. Если он обрабатывает файловый или сетевой ввод / вывод, то объединение его с пулом, интенсивно использующим процессор, может быть пессимизацией, поскольку ввод / вывод не потребляет ЦП.

Обычно должен быть небольшой пул или, возможно, даже один поток обработка ввода / вывода accept l oop и asyn c, передача новых запросов в рабочий пул для обработки и отправки результатов обратно в сеть.

Старайтесь избегать смешивания работы с интенсивным ЦП с Ввод / вывод работает, так как это затрудняет управление использованием ресурсов. Сказав это, иногда просто проще и никогда не бывает хорошо работать на 100% CPU. Так что да, вы должны попробовать иметь только один бассейн. Но измерьте производительность до / после изменения.

...