| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Многопоточность |
| Автор: Mach3 25.3.2011, 16:55 |
| Добрый день. Появилась необходимость переделать программу, используя несколько потоков. Суть работы программы, примерно, в следующем: каждый промежуток времени программа проверяет наличие новой информаци на сайте. При наличии таковой, сравнивает ее с инфой с другого сайта и в случае выполнения определенных условий- информирует пользователя. В настоящий момент все работает в одном потоке: ![]() Появилась необходимость проверять инфу на нескольких сайтах. Не могу сообразить как правильно "прикрутить" потоки. Пока что все сводится к организации следующей структуры: ![]() Хочется сделать все правильно и граммотно. Поэтому очень хочу услышать ваше мнение или предложение.. Спасибо. |
| Автор: cat512 25.3.2011, 18:38 | ||||
| Я после определённых експериментов, в своё время, пришёл к использованию многопоточной управляемой (пуловой) архитектуре, т.к. однопоточная ограничивает производительность, а многопоточная не управляемая, при росте количества потоков, снижает производительность и в конечном итоге упирается в ограничения операционной системы (не масштабируется). Пуловая выглядит след. образом: В основном потоке запускается Мэнеджер пула потоков, который по требованию клиента, выделяет ему необход. ресурсы(потоки) Радует то, что программеру, не нужно реализовывать такую архитектуру. Её уже реализовали парни, в библиотеке Indy, за что им отдельное спасибо. Поэтому, сразу отправляю тебя к исходному коду классов TIdThreadMgrPool, TIdThreadMgr, TIdThread. Работать с ними проще простого! Основное, что тебе надо сделать - создать наследника от ТIdThread и перекрыть метод Run. Собственно в этом методе будет реализованна часть твоего алгоритма, например с шага
по
Далее, в целях оптимизации, можно еще распараллелить код, выполняя части шагов алгоритма в отдельных потоках. Но тут надо очень хорошо подумать, какие шаги алгоритма распараллеливать. В основном потоке тебе надо будет реализовать процедуру планировщика. Что-то типа: Держим список сайтов и последовательно обрабатываем, по максимуму загружая пул. Освободившиеся потоки, загружаем следующими по списку, необработанными ссылками. В общих словах как-то так. |
| Автор: Mach3 25.3.2011, 19:34 |
Может имеется пример, демонстрирующий работу с этими компонентами? Спасибо. |
| Автор: cat512 26.3.2011, 01:06 |
| На вот, когда - то писал сервис, не знаю разберёшся или нет. Там один модуль из проекта |