ThreadPool и Producer - вопрос дизайна потребительского паттерна - PullRequest
1 голос
/ 04 октября 2010

Я хочу реализовать шаблон Производитель - Потребители, используя ThreadPool для Потребителей. У меня будет 1 производитель запросов и несколько потребителей, которые будут обрабатывать входящие запросы. При реализации потребителей, использующих пул потоков, у меня возникает вопрос, должна ли у меня по-прежнему быть собственная очередь, в которую производитель должен поместить запросы, а затем передать их в Cosumers ThreadPool, или если мне просто нужно, чтобы производитель передал ее прямо в очередь ThreadPool?

Меня беспокоит последнее: сколько задач можно передать в очередь ThreadPool и с какой скоростью? Производитель должен довольно быстро выполнить некоторую работу по предварительной обработке, прежде чем передать ее потокам потребителя.

Не получу ли я больше контроля, когда у меня будет очередь между источником - потоком потребителя?

Это для серверного приложения, которое должно быть высокопроизводительным и должно обрабатывать множество входящих клиентских запросов. (Сотнями за раз).

Любой совет приветствуется!

1 Ответ

1 голос
/ 04 октября 2010

Для очереди между производителем и пулом потоков требуется 1 или 2 дополнительных переключателя контекста: пул потоков ожидает пустую очередь, а затем должен отправлять поток потребителя. В конце потребитель должен быть представлен обратно в пул потоков. Диспетчеризация и обработка конца могут управляться классом сообщений.
Когда все потоки потребителя ожидают в очереди, один из слушателей будет использовать и прекратить прослушивание до готовности Когда все потребители заняты, следующее сообщение будет обработано, когда первый потребитель будет готов.
Таким образом, первое поведение более предсказуемо, за исключением дополнительных контекстных переключателей.

...