![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
КАК МНЕ ОРГАНИЗОВАТЬ МНОГОПОТОЧНЫЙ ПОИСК [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]
> это слишком медл инно
быстрей не получится.
потоки (нити) не предназначены для "ускорения" чего-то там