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

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

Проблема с потоками сканирования [WinXP]


Страницы:   1 2 3

bvv ©   (2009-09-17 14:57:00) 

Знатоки!
Написал программу сканирования сети.
Для сокращения времени сканирования разбил проверку адресов IP на потоки, если результаты поиска по каждому потоку выводить в свой файл проблем никаких. Если результаты поиска записывать во временный массив простая синхронизации потоков работает только при небольшом количестве потоков. Критические секции немного улучшают ситуацию, но поиск в 256 потоков находит число IP-адресов гораздо больше чем с 1792 потока, переход на Mutex проблемы не решает и оптимальным числом потоков остаётся ~512. Mutex используется только при завершении работы потока для записи результатов поиска в общий массив, да и то, для каждого потока организован свой раздел в массиве, в который нет доступа другим потокам. Процессор двух ядерный.
Всё процессорное время, во время сканирования, съедают Svchost и Acs.
Почему происходят такое различие результатов поиска, если число потоков отличается в три раза, если верить теории этого быть не должно.

С благодарностью Вл.


bvv   (2009-09-17 17:03:00) [41]

Для С сети проблем вообще никаких нет, если В сетку сканировать как последовательный ряд С сетей, судя по всему Вы правы, но тогда каждый раз нужно создавать и гасить новые потоки, а это время. Гораздо проще, весь диапазон разбить на равные отрезки, и на каждый отрезок создать свай поток, это ничему не противоречит, поскольку в каждом потоке не проверяется больше одной станции, и мы не выходим за предельное число потеков в одном процессе, кроме того, если каждый поток записывает результаты поиска в свой файл, тогда здесь даже синхронизация потоков не нужна, всё на Ура проходит.


Anatoly Podgoretsky   (2009-09-17 16:52:00) [42]

> bvv  (17.09.2009 16:44:04)  [4]

Не очень верно, пусть поток сканирует только один адрес, тогда быстрее будет. 256 потоков достаточно, для блока С, а к нему можно привести и В и С.
По сути получается почти равное время, что для одного потока.


bvv   (2009-09-17 16:44:00) [43]

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


Сергей М.   (2009-09-17 16:41:00) [44]


> время тратится на ожидание ответа


Ну так ведь поток, получивший ответ, можно тут же напрячь пинговать следующий адрес..

А пинг-то какими средствами ? raw sockets или wininet-интерфейс ?


bvv   (2009-09-17 15:45:00) [45]

Основное время тратится на ожидание ответа, если сеть класса В и занято много адресов, время сканирования десятки минут, если свободных адресов большая часть это Часы, даде при 512 потоках.


Сергей М.   (2009-09-17 15:13:00) [46]

И куда столько потоков ?
Очуметь же можно - аж под две тысячи)
Хотя для решения задачи с неменьшей эффективностью вполне хватит и дюжины)


Страницы:   1 2 3

Наверх

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