Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Многопоточность


Автор: Mach3 25.3.2011, 16:55
Добрый день.
Появилась необходимость переделать программу, используя несколько потоков.
Суть работы программы, примерно, в следующем: каждый промежуток времени программа проверяет наличие новой информаци на сайте. При наличии таковой, сравнивает ее с инфой с другого сайта и в случае выполнения определенных условий- информирует пользователя.
В настоящий момент все работает в одном потоке:
user posted image
Появилась необходимость проверять инфу на нескольких сайтах. 
Не могу сообразить как правильно "прикрутить" потоки.
Пока что все сводится к организации следующей структуры:
user posted image
Хочется сделать все правильно и граммотно. Поэтому очень хочу услышать ваше мнение или предложение..
Спасибо.

Автор: cat512 25.3.2011, 18:38
Я после определённых експериментов, в своё время, пришёл к использованию многопоточной управляемой (пуловой) архитектуре, т.к. однопоточная ограничивает производительность, а многопоточная не управляемая, при росте количества потоков, снижает производительность и в конечном итоге упирается в ограничения операционной системы (не масштабируется).
Пуловая выглядит след. образом:
В основном потоке запускается Мэнеджер пула потоков, который по требованию клиента, выделяет ему необход. ресурсы(потоки) Радует то, что программеру, не нужно реализовывать такую архитектуру. Её уже реализовали парни, в библиотеке Indy, за что им отдельное спасибо.
Поэтому, сразу отправляю тебя к исходному коду классов TIdThreadMgrPool, TIdThreadMgr, TIdThread.
Работать с ними проще простого!
Основное, что тебе надо сделать - создать наследника от ТIdThread и перекрыть метод Run.
Собственно в этом методе будет реализованна часть твоего алгоритма, например
с шага 
Цитата

Загрузили страницу А

по
Цитата

Сравнили инфу А с Б

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

Автор: Mach3 25.3.2011, 19:34
Цитата(cat512 @  25.3.2011,  18:38 Найти цитируемый пост)
Работать с ними проще простого!

Может имеется пример, демонстрирующий работу с этими компонентами?
Спасибо.

Автор: cat512 26.3.2011, 01:06
На вот, когда - то писал сервис, не знаю разберёшся или нет. Там один модуль из проекта




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)