#performance #language-agnostic #io #web-crawler
#Производительность #не зависит от языка #io #веб-сканер
Вопрос:
Я видел это в некоторых ответах на S / O, где указывается, что язык программирования не имеет большого значения для сканера, и поэтому C является излишеством по сравнению, скажем, с Python. Может кто-нибудь, пожалуйста, объяснить это в терминах непрофессионала, чтобы не было двусмысленности в отношении того, что подразумевается? Здесь также приветствуется разъяснение базового предположения.
Спасибо
Комментарии:
1. Если вы потратили какое-то время на сканирование веб-страниц, это совершенно очевидно. Для обработки HTML требуется очень мало процессора, но большая часть вашего времени тратится на ожидание завершения сетевого ввода-вывода. Поэтому, если у вас обычно есть несколько страниц для обхода, потратьте время на алгоритм асинхронного обхода.
2. Я считаю, что правильная терминология — «связанный ввод-вывод»
Ответ №1:
Это означает, что ввод-вывод здесь является узким местом. Выход в сеть для извлечения страницы (ввод-вывод) происходит медленнее, чем анализ страницы (процессор).
Таким образом, ускорение процессора в десять раз мало повлияет на общее затраченное время. С другой стороны, удвоение скорости ввода-вывода будет иметь очень положительный эффект, вплоть до того момента, когда процессор начнет становиться узким местом.
Комментарии:
1. … и если вы не занимаетесь каким-то серьезным обработкой чисел, это почти всегда будет так
2. Имейте в виду, что синтаксический анализ загруженной страницы также состоит из ввода-вывода, даже если источником является оперативная память, а не сеть. Получение данных из памяти в ЦП (и обратно), скорее всего, все равно будет медленнее, чем фактическая обработка их в ЦП.
3. Я думаю, что в наши дни разметка для большинства любых страниц поместилась бы в кеш, поэтому анализ удовлетворял бы любому полезному определению выполнения «на процессоре». И поскольку процесс извлечения данных из ОЗУ не может контролироваться или даже непосредственно наблюдаться прикладным программистом, а передача данных из ЦП в ОЗУ имеет совершенно иные схемы использования и характеристики производительности, чем периферийный ввод-вывод, приведение его здесь только запутывает дело.
Ответ №2:
Это означает, что программе требуется больше времени на чтение и запись (через диск или сеть), чем на фактическое выполнение алгоритмов в коде. Ввод-вывод значительно медленнее, чем у большинства процессоров, и его использование обычно сильно замедляет работу программы.
Ответ №3:
Следует добавить одно: во время операций ввода-вывода ваша программа (если она не написана плохо) не использует процессор активно, она находится в неактивном состоянии (спящий режим).