Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

КАК МНЕ ОРГАНИЗОВАТЬ МНОГОПОТОЧНЫЙ ПОИСК [D6, WinXP]


nevalex ©   (2005-09-30 11:15:00) 

КАК МНЕ ОРГАНИЗОВАТЬ МНОГОПОТОЧНЫЙ ПОИСК
у меня есть функция поиска файлов в сети
но это слишком медлинно
как мне организовать потоки(нити) чтобы я смог запустить функцию поиско с параметрами (DIR , mask)
если можно пример (не функции а организации этого)
-----------------
мне надо именно раскидать эти потоки по компам чтобы они искали каждый свое


Digitman   (2005-09-30 18:00:00) [1]


> Fay ©   (30.09.05 17:25) [8]


уместен будет лишь в случае иной совершенно задачи, когда требуется просто обнаружить фактическое существование некоего файла на некоем ресурсе ... т.е. когда задача звучит иначе - есть список сет.ресурсов, найти первое же присутствие некоего файла хотя бы в одном из сет.ресурсов.


Fay   (2005-09-30 17:25:00) [2]

2 ANB ©   (30.09.05 15:22) [5]
2 Digitman ©   (30.09.05 15:42) [7]

Мне кажется, что многопоточный поиск по нескольким компам действительно уместен.

Соглашусь, пожалуй, с ANB ([5])
>> Большую часть времени эти потоки будут ждать ответа от файловой системы и сетки
, но я уверен, что выигрыш будет на том, что разные потоки будут курить в разное время, а не по очреди. Т.е. несколько потоков курят + несколько уже что-то делают.


Digitman   (2005-09-30 15:42:00) [3]


> ANB ©   (30.09.05 15:25) [6]


в общем случае время, затраченное одним-единственным потоком и затраченное суммарно N-ным кол-вом потоков (того же процесса) на решение конечной задачи, будет сравнимо.

частный случай (мультипроцессорная система, гипертрединг и т.п.) не рассматриваем.

под "конечной задачей" я подразумеваю следующее :

сет.ресурс "1" - потенциально существуют X искомых файлов
сет.ресурс "2" - потенциально существуют Y искомых файлов
сет.ресурс "3" - потенциально существуют Z искомых файлов

и т.д.

задача - сформировать список записей вида:

Поле1 - Ид-р ресурса
Поле2 - Путь к найденному файлу, включая имя

И какая разница, сколько потоков будут решать эту задачу ?

Пока все потоки не отработают поиск в своем ресурсе, список не может считаться сформированным.


ANB   (2005-09-30 15:25:00) [4]


> Digitman ©   (30.09.05 15:17) [4]
- а чисто теоретически : если я запущу 10 вычислительных потоков на машине с HT, они в сумме будут также считать, как и один поток, или таки чуть чуть быстрее ? (Если запустить все в отдельных процессах - суммарная производительность выше, проверял лично)


ANB   (2005-09-30 15:22:00) [5]


> Digitman ©   (30.09.05 15:17) [4]
- да не должно бы. Большую часть времени эти потоки будут ждать ответа от файловой системы и сетки, посему, по идее, должно бы быстрее в сумме получиться.


Digitman   (2005-09-30 15:17:00) [6]


> Lamer@fools.ua ©   (30.09.05 12:46) [2]


нет, не получится.

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


ANB   (2005-09-30 14:12:00) [7]


> nevalex   (30.09.05 11:15)
- создаешь свой класс нити. В поля прописываешь параметры поиска и место для результата. В процедуре выполнения засовываешь сам поиск (можно вынести в отдельную процедуру, только не в коем случае не обращайся оттуда к VCL. Хотя обращение к VCL и можно сделать неошибочным, но потоки начнут ждать друг друга и эффекта не будет) Дальше генеришь нужное количество объектов, заполняешь поля параметров и запускаешь. В основном потоке ждешь, пока завершаться потоки (можно каждый по отдельности обрабатывать) и достаешь из объектов нити ответ.


Lamer@fools.ua   (2005-09-30 12:46:00) [8]

>> Digitman ©   (30.09.05 12:31) [1]

При поиске в сети можетполучиться. Например, если искать параллельно на нескольких сетевых компьютерах.


Digitman   (2005-09-30 12:31:00) [9]


> это слишком медл инно


быстрей не получится.
потоки (нити) не предназначены для "ускорения" чего-то там


Наверх

Титульная страница Поиск, карта сайта Написать письмо