Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распараллеливание потока 
:(
    Опции темы
AlexeyShestchenko
Дата 23.4.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.2.2008

Репутация: нет
Всего: нет



Всем здрасти.
У меня тут такое дело..вообщем думаю на программу нацепить потоки, т.к. в ней присутствует скачка страниц из интернета.
Задача такая, у друга есть хостинг (~1000 сайтов).
Имеются ссылки на все страницы этих сайтов, понятно откуда smile

Друг попросил чтобы я написал прогу, которая будет проверять наличие определенных keyword на страницах этих сайтов.
Причем сделать все это нужно было под win!!!(как просто это делается в unix обсуждать не будем, а то ща полетят советы ;))). все сделал, работает, Но последовательно, береться одна ссылка, потом вторая и т.д.
Но вот подумал что если сделать все это дело через потоки то оно быстрее будет, при распараллеливании.
Вижу следующим образом, если не верно то поправьте, опыт работы с потоками >> 0 :
создаю поток - МОНИТОР, еоторый будет мониторить кол-во запущенных потоков и их состояния.
ну и сам поток который будет скачивать страницу и проверять keywords'ы и в зависимости от их нахождения добавлять инфу на форму.
В ту сторону думаю или нет?
Если мыслю правильно, то следующий вопрос, сколько надо загружить одновременно потоков для загрузки страниц?

Петровича читал.
Жду ваших комментариев и советов на мою тему.
PM MAIL   Вверх
dumb
Дата 23.4.2008, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



может таки ограничиться поиском по файлам локально, раз уж друг - хостер?
PM MAIL   Вверх
AlexeyShestchenko
Дата 23.4.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.2.2008

Репутация: нет
Всего: нет



я ж написал что надо под вынь, это делается на заказ для группы людей,кто им даст доступ к серваку.)))

можно конечно ограничиться тем что есть, но я уверен просто что с использованием потоков работать будет быстрее. Прошу помощи!
PM MAIL   Вверх
dumb
Дата 24.4.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Цитата(AlexeyShestchenko @  23.4.2008,  20:26 Найти цитируемый пост)
создаю поток - МОНИТОР, еоторый будет мониторить кол-во запущенных потоков и их состояния.
мониторить можно и из основного потока.

Цитата(AlexeyShestchenko @  23.4.2008,  20:26 Найти цитируемый пост)
сколько надо загружить одновременно потоков для загрузки страниц?
запускай потоки не все сразу, а через промежутки по 100-1000 мс(примерно), и поставь ограничение на их число что-нибудь около 64. хотя по хорошему, всякие задержки и количество надо считать в зависимости от времени выполнения этих потоков.
PM MAIL   Вверх
AlexeyShestchenko
Дата 24.4.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.2.2008

Репутация: нет
Всего: нет



мониторить из основного потока - это имеется ввиду таймером?
а если мне надо еще к тому мониторить появление новых данных на проверку, как тогда быть?

почему нужно делать временные промежутки между запусками потоков?
я примерно сделал похожую конструкцию.
т.е. есть поток монитор, на форме есть переменная count_theards; которая отвечает за кол-во запущенных потоков. монитор запускает 50 потоков, и када какой нить поток завершают свою работу то монитор запускает новый поток и так все.
вроде ничего, но столкнулся с проблемой что иногда потоки завершают свою работу так и не выдав мне данные, хотя они есть!
значит происходит какой-то сбой...чтоли...пока не пойму в чем дело.
PM MAIL   Вверх
dumb
Дата 25.4.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Цитата(AlexeyShestchenko @  24.4.2008,  15:57 Найти цитируемый пост)
почему нужно делать временные промежутки между запусками потоков?
оно не "нужно", а "лучше". запуск потока - сравнительно тяжелая операция. а потом эти потоки у тебя "наперебой"(в смысле почти одновременно) начинают соединяться...

Цитата(AlexeyShestchenko @  24.4.2008,  15:57 Найти цитируемый пост)
столкнулся с проблемой что иногда потоки завершают свою работу так и не выдав мне данные, хотя они есть!
это просто ошибки. smile
PM MAIL   Вверх
AlexeyShestchenko
Дата 25.4.2008, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.2.2008

Репутация: нет
Всего: нет



какие ошибки?
поиск приметивен
posex
PM MAIL   Вверх
dumb
Дата 25.4.2008, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Цитата(AlexeyShestchenko @  25.4.2008,  03:00 Найти цитируемый пост)
какие ошибки?
ошибка в 17-ой строке

скорее всего при передаче результата работы из потока.
PM MAIL   Вверх
AlexeyShestchenko
Дата 25.4.2008, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.2.2008

Репутация: нет
Всего: нет



Код

procedure TKey.start;
begin
  if Form1.ListBox2.Items.count > 0 then
  begin
    S := form1.ListBox2.Items.Strings[0];
    form1.ListBox2.Items.Delete(0);
  end;
end;

procedure TKey.Execute;
var
  list: string;
begin
  Synchronize(start);
  list := get('get', S);
  if Posex(keys, list, 1) <> 0 then
    Synchronize(update);
end;

procedure TKey.update;
begin
  form1.ListBox3.Items.Add(s);
end;


Это сообщение отредактировал(а) AlexeyShestchenko - 25.4.2008, 10:31
PM MAIL   Вверх
AlexeyShestchenko
Дата 26.4.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 7.2.2008

Репутация: нет
Всего: нет



неужели нечем помочь, коллеги?
PM MAIL   Вверх
MetalFan
Дата 26.4.2008, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



и что, ты ждешь телепатов, чтоб тебе что-то сказали по твоему "огрызку" кода?
что за Get? что за S, key, list?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.