Home

Page 221
Page 221
background image

214 Глава 5

основы на практике. Дополнительные функции мы изучим в процессе на-

писания самого быстрого в мире

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

несколько фирм, рекламирующих свои сканеры, какие самые быстрые, и

никто не ответил. А меня просто интересовало, действительно ли сканер
быстрый, или это только реклама.

Такая секретность достаточно очевидна, ведь если снять тайну с алгоритма,
то они не смогут заколачивать деньги. Зайдите на download.com и посмотри-
те, сколько денег просят за быстрый сканер. Любой познавший эту тайну
сразу пишет свою программу, пичкает

 никому ненужными

дополнительными возможностями и продает по

 у. е. за программу.

Вроде не так уж много, но небольшой капитал заработать можно.

Я не жадный и поэтому решил поделиться своим быстрым алгоритмом. Ес-

ли вы сможете красиво оформить мой сканер портов, то сможете начать за-

рабатывать доллары для нашей страны вполне нормальным программирова-

нием. Почему Индия может поддерживать свой бюджет благодаря

программистам, а мы его наполняем благодаря нефтяникам?
Ну а если вы добавите в свой сканер такие возможности, как Ping, Whois
(см. разд. 4.2) или что-то еще из сетевых примочек, то у вашей программы
будет намного больше шансов заработать больше денег.
Но для начала посмотрим на то, как программисты неправильно пытаются

увеличить скорость сканирования портов. Для этого многие пытаются ис-

пользовать преимущества многозадачности окошек, запускают кучу потоков,

и в каждом из них делают попытку соединиться со своим портом. Ориги-

нально, но это напрягает ОС и компьютер, да и увеличение в скорости по-

лучается незначительное.

Если работать с сетью в синхронном режиме, то получаются большие на-
кладные расходы на ожидание соединения, и для реального увеличения

скорости нужно запускать 30—40 потоков. Это очень неудобно и усложняет
программу, а значит, она будет нестабильной и неудобной.

Для нормального сканирования не надо никаких дополнительных потоков.

Тут нужно воспользоваться возможностями асинхронности сетевых функ-
ций. Это, на первый взгляд, выглядит сложнее в программировании, но ре-
ально такой сканер будет содержать намного меньше кода (максимум
40 строчек), а главное — реальный выигрыш в скорости и реальная парал-

лельность сканирования. Напомню, что при синхронном режиме ОС оста-

навливается на каждой функции и ожидает ее окончательного исполнения.

При асинхронном режиме функция выполняется и не ждет ожидания ответа

от сервера.

Рассмотрим реальный пример асинхронности. Для нашего сканера нужна

только одна функция — connect. Когда мы вызываем ее в асинхронном


Copyright © 2020 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.