Многопоточный сервер, использующий пул потоков - PullRequest
1 голос
/ 13 марта 2011

Я планирую многопоточный сервер (если быть точным, SCGI).Теперь я знаю, что традиционный подход с использованием одного потока на соединение не очень масштабируем.Я также не хочу использовать что-то необычное, например libevent, так как это хобби-проект, и я предпочитаю не иметь много зависимостей в моей кодовой базе.

Подход, о котором я думаю, - это использовать пул потокови позволить одному потоку прослушивать сеть, чтобы поставить в очередь любой поступающий запрос. Потоки, управляемые пулом, затем удаляют запросы из очереди, получают данные и отвечают соответственно.

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

Есть ли какая-то фундаментальная проблема в этом архитектурном проекте, о которой я не знаю, или это не идеал, но все же нормальнорешение?

Спасибо!

1 Ответ

1 голос
/ 13 марта 2011

выглядит хорошо.В зависимости от того, какую нагрузку ожидает этот сервер, это может быть излишним.

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

С другой стороны, если вы ищете что-то, что должно обрабатывать тонны трафика (либо внешнего, например webproxy)или внутренний, как memcache) вы, вероятно, должны просто использовать libevent.AFAIK все большие парни используют его или что-то очень похожее (memcache, haproxy и т. Д.)

Наконец, если вы делаете это просто для удовольствия, просто используйте все, что вы хотите :) Можно добиться хорошей производительности свсе эти арки.

...