![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с потоками сканирования [WinXP]
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]И куда столько потоков ?
Очуметь же можно - аж под две тысячи)
Хотя для решения задачи с неменьшей эффективностью вполне хватит и дюжины)