![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Mach3 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 26.11.2005 Репутация: нет Всего: 2 |
Добрый день.
Появилась необходимость переделать программу, используя несколько потоков. Суть работы программы, примерно, в следующем: каждый промежуток времени программа проверяет наличие новой информаци на сайте. При наличии таковой, сравнивает ее с инфой с другого сайта и в случае выполнения определенных условий- информирует пользователя. В настоящий момент все работает в одном потоке: ![]() Появилась необходимость проверять инфу на нескольких сайтах. Не могу сообразить как правильно "прикрутить" потоки. Пока что все сводится к организации следующей структуры: ![]() Хочется сделать все правильно и граммотно. Поэтому очень хочу услышать ваше мнение или предложение.. Спасибо. --------------------
Век живи - век учись... |
|||
|
||||
| cat512 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 2 Всего: 15 |
Я после определённых експериментов, в своё время, пришёл к использованию многопоточной управляемой (пуловой) архитектуре, т.к. однопоточная ограничивает производительность, а многопоточная не управляемая, при росте количества потоков, снижает производительность и в конечном итоге упирается в ограничения операционной системы (не масштабируется).
Пуловая выглядит след. образом: В основном потоке запускается Мэнеджер пула потоков, который по требованию клиента, выделяет ему необход. ресурсы(потоки) Радует то, что программеру, не нужно реализовывать такую архитектуру. Её уже реализовали парни, в библиотеке Indy, за что им отдельное спасибо. Поэтому, сразу отправляю тебя к исходному коду классов TIdThreadMgrPool, TIdThreadMgr, TIdThread. Работать с ними проще простого! Основное, что тебе надо сделать - создать наследника от ТIdThread и перекрыть метод Run. Собственно в этом методе будет реализованна часть твоего алгоритма, например с шага
по
Далее, в целях оптимизации, можно еще распараллелить код, выполняя части шагов алгоритма в отдельных потоках. Но тут надо очень хорошо подумать, какие шаги алгоритма распараллеливать. В основном потоке тебе надо будет реализовать процедуру планировщика. Что-то типа: Держим список сайтов и последовательно обрабатываем, по максимуму загружая пул. Освободившиеся потоки, загружаем следующими по списку, необработанными ссылками. В общих словах как-то так. |
||||
|
|||||
| Mach3 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 26.11.2005 Репутация: нет Всего: 2 |
Может имеется пример, демонстрирующий работу с этими компонентами? Спасибо. --------------------
Век живи - век учись... |
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 2 Всего: 15 |
На вот, когда - то писал сервис, не знаю разберёшся или нет. Там один модуль из проекта
Присоединённый файл ( Кол-во скачиваний: 9 )
uJobManager.pas 8,82 Kb |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |