Извините, у меня недостаточно репутации, чтобы использовать комментарии, поэтому я должен опубликовать новый ответ, чтобы внести какой-либо вклад.
OP задает конкретный вопрос о http: //www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/http/server3/. Это пример http-сервера, который запускает пул потоков для обработки http-запросов.
Первоначальный вопрос OP можно было бы переформулировать: «Учитывая серверную машину с набором ресурсов A и рабочую нагрузку, которая потребляет ресурсы B на запрос, сколько потоков я должен выделить в пуле потоков?»
Здесь есть поток: Разумное количество потоков для пула потоков, работающего в Интернете запросы на обслуживание с аналогичным обсуждением (относительно пулов потоков Java), но это обсуждение, похоже, не приводит к какому-либо окончательному ответу.
Вот пример краткого руководства по планированию емкости в «старомодном стиле мэйнфреймов 1970-х годов», которое я изучил в школе: http://www.cs.umb.edu/~eb/goalmode/primer.pdf.
В этом случае вы можете создать простую модель, например:
У вас есть средняя скорость поступления запросов, X. Для каждого запроса вы потребляете определенное среднее количество ресурсов ЦП (в единицах времени) S_c и среднее количество времени, затрачиваемое на ожидание завершения запросов к диску, S_d. Таким образом, каждый поток занимает среднее время S_c + S_d, прежде чем он будет возвращен в пул потоков. (Вам нужно будет измерить это.) Таким образом, в среднем вы ожидаете, что вам потребуется по крайней мере N = X * (S_c+S_d) потоков, чтобы входящие потоки не стояли в очереди в пустом пуле потоков. На самом деле вы можете захотеть выделить небольшое количество N (например, 3N) потоков, чтобы иметь возможность справляться с всплесками того или иного типа.
Но количество потоков в пуле на самом деле не является интересным ограничением. Интересным ограничением является либо общий объем ЦП, либо общий объем доступной пропускной способности диска. Предположим, что каждый запрос требует обработки ЦП в течение 3 секунд, и у вас есть система с 12 ядрами. Таким образом, за любой 3-секундный период вы должны обрабатывать 12 одновременных запросов. Таким образом, средняя скорость поступления более 12/3 = 4 запроса в секунду приведет к насыщению вашего ЦП. (Аналогичный расчет пропускной способности вашего диска.)
Итак, на самом деле вам предстоит выяснить следующее: учитывая мою ожидаемую скорость поступления запросов, X, а также количество ресурсов ЦП и диска, потребляемых каждым запросом, сколько процессора и диска мне следует приобрести?
person
Wandering Logic
schedule
30.03.2013