может я плохо объясняю проблему но ваши ссылки ничего общего с ней не имеют.
При работе с сетью мы имеем дело с latency и throughput. Предположим что любой запрашиваемый сайт подключён к высокоскоростной линии, т.е. скорость скачки ограничена только с нашей стороны. И скорость приёма == скорости отдаче.
Тогда если бы latency==0 то можно было бы все запросы слать последовательно в одной горутине. Пусть одну страничку мы скачиваем за 1сек, тогда при последовательно схеме 2 странички - за 2 сек, логично. (временем запроса принебрегаем)
Теперь в эту систем добавим задержку (latency) в 2 сек для каждой страничке. Тогда время скачки 2х страниц станет: (1+2) + (1+2) = 6 сек.
Что происходит если мы запрашиваем две странички параллельно: два запроса почти одновременно уходят в сеть, затем стадия задержки, затем стадия закачки каждой странички (последовательно) т.е. общее время станет : 2(задержка) +1(страничка) +1(страничка) = 4 сек. Причём TCP пакеты этих двух страничек перемешаются произвольным образом и по факту мы будем видеть как будто каждая страничка скачивается за 2 сек, но параллельно. Если Было бы 5 страничек - 5 сек для каждой странички, если 10 - то 10 сек, если 60 - то таймаут !
Итак задача заключается в том что бы обеспечить непрерывное поступление страничек в канал, не доводя до таймаутов. Т.е допустим обычная страничка (100Kb) должна быть скачана не больше чем за 10 сек. для этого мы должны были запросить не более чем 10 страничек. Т.е. скорость запросов = 10 стр/10 сек = 1стр/сек. (верно исключительно для данного примера).
Либо можно сказать по другому:
Скорость отправки запросов в единицу времени должна быть равна скорости приёма страничке за то же время. Единица времени берётся такая что бы не превышались таймауты.
Таким образом вырисовывается система с обратной отрицательной связью:
1) задаём желаемое время приёма страничек, снизу ограничено скоростью канала, сверху таймаутом.
2) в коде мониторим реально время загрузки, если меньше - добавляем реквест воркеров, если больше - убавляем.
Что думаете о таком подходе? давайте обсуждать или критиковать, в дебатах рождается истина (с)
суббота, 17 октября 2015 г., 0:24:15 UTC+3 пользователь Denis Bakhtin написал: