Я знаю, что это странный вопрос, но выслушай меня. Я работаю над высокой пропускной способностью, вычислять тяжелый внутренний сервер HTTP в C ++. Это довольно просто:
- Раскручивает HTTP-сервер
- Получите некоторый запрос
- Делайте много математики
- Этот шаг распараллелен использование TBB
- Отправить результат обратно (занимает около 20 мс)
- Нет ограничений на то, как скоро должен получиться ответ. Но чем меньше наихудший случай, тем лучше.
Теперь мое узкое место в серверной части использует пул потоков, отличный от TBB. Таким образом, когда TBB занят, занимаясь математикой. Сервер может внезапно получить десятки новых запросов, затем поток со стороны сервера будет запланирован, что приведет к большим ошибкам кэша и ошибкам прогнозирования ветвлений.
Решение, которое я нашел, состоит в том, чтобы разделить пул потоков TBB с сервером. Тогда никакой запрос не будет зарегистрирован, пока TBB занят и обрабатывается сразу после освобождения TBB.
Это хорошая идея? Или это может иметь потенциальные проблемы?