|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
Нашел организацию пула на "С++".. Но че то ниче Я не понимаю... http://rsdn.ru/article/baseserv/threadpool.xml
|
#17
|
|||
|
|||
Все... Разобрался с размером стека... Delphi задает самый минимальный размер стека... Меньше нельзя... 32768... Так что нужно организовать наверное пул потоков...
|
#18
|
|||
|
|||
Можешь попробовать взять TThreadPool из Indy.
|
#19
|
||||
|
||||
TThreadPool не нашел. Нашел что-то похожее.
В Delphi 7 - TIdThreadMgrPool. В 2010 - TIdSchedulerOfThreadPool. Сам давно писал Пул нитей ( и вроде на других компонентах ). Техника в общем несложная: Задается максимальный размер пула ( лучше настраиваемый т.к. оптимальное число зависит от архитектуры компьютера, в том числе количества ядер ). Процесс получив запрос от клиента обращается к пулу. Если уже есть свободная ( остановленная ) нить запрос передается ей для обработки. Если нет проверяется сколько уже создано нитей. Если еще меньше максимума - создается новая нить и ей передается запрос. Если уже заполнен пул запрос помещается в очередь. Первая освободившаяся нить проверяет очередь. Если в ней есть запросы - переходит к обработке, если очередь пуста - останавливается и помечается свободной. При этом экономим время на создании и уничтожении нитей и нагрузка на компьютер ( сервер ) получается более контролируемая. И в отличии от последовательной обработки в одном потоке длительная обработка сложного запроса не затормозит обработку остальных. ( пока одна нить обрабатывает один длительный другие успеют по несколько простых обработать ). Вот приблизительно где-то так. Если что упустил или не правильно изложил, надеюсь дополнят или поправят. |