Показать сообщение отдельно
  #19  
Старый 03.01.2010, 12:20
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

TThreadPool не нашел. Нашел что-то похожее.
В Delphi 7 - TIdThreadMgrPool. В 2010 - TIdSchedulerOfThreadPool.

Сам давно писал Пул нитей ( и вроде на других компонентах ).
Техника в общем несложная:

Задается максимальный размер пула ( лучше настраиваемый т.к. оптимальное число зависит от архитектуры компьютера, в том числе количества ядер ).

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