TThreadPool не нашел. Нашел что-то похожее.
В Delphi 7 - TIdThreadMgrPool. В 2010 - TIdSchedulerOfThreadPool.
Сам давно писал Пул нитей ( и вроде на других компонентах ).
Техника в общем несложная:
Задается максимальный размер пула ( лучше настраиваемый т.к. оптимальное число зависит от архитектуры компьютера, в том числе количества ядер ).
Процесс получив запрос от клиента обращается к пулу. Если уже есть свободная ( остановленная ) нить запрос передается ей для обработки. Если нет проверяется сколько уже создано нитей. Если еще меньше максимума - создается новая нить и ей передается запрос. Если уже заполнен пул запрос помещается в очередь. Первая освободившаяся нить проверяет очередь. Если в ней есть запросы - переходит к обработке, если очередь пуста - останавливается и помечается свободной.
При этом экономим время на создании и уничтожении нитей и нагрузка на компьютер ( сервер ) получается более контролируемая.
И в отличии от последовательной обработки в одном потоке длительная обработка сложного запроса не затормозит обработку остальных. ( пока одна нить обрабатывает один длительный другие успеют по несколько простых обработать ).
Вот приблизительно где-то так. Если что упустил или не правильно изложил, надеюсь дополнят или поправят.
|