Ответить Создать тему

Алгоритм выбора параметров upload&download

sim1246
post Oct 29 2010, 19:28 
Отправлено #1


Продвинутый

Сообщений: 192



Привет всем!
Есть сервер на который нужно закачивать информацию, из разных мест, с разными скоростями интернета и т.д. Вообщем большие файлы не всегда удается закачать и их приходится делить на части. Кроме того система upload&download поддерживает многопоточность, качать и закачивать можно несколькими потоками.
По какому алгоритму можно выбрать оптимальное количество потоков и число частей на которые бить файл.
Я понимаю что вопрос наверное для целого научного исследования, но может кто нибудь знает хоть в какой литературе можно почитать про это.
Заранее спасибо, всем откликнувшимся

Сообщение отредактировал Snowm@n - Apr 10 2011, 13:26
Profile CardPM
  0/0  
sim1246
post Nov 3 2010, 14:58 
Отправлено #2


Продвинутый

Сообщений: 192



Нечего толкового в литературе найти не удалось, сейчас проводим свои исследования. Я не очень разбираюсь в устройстве интернета и у меня еще тут один вопрос возник.
Мы загружаем файлы на сервер начиная с маленького и постепенного увеличиваем размер. Так вот при увеличения размера файла, отношение объема файла к времени передачи файла ( не знаю можно ли это назвать скоростью передачи) постоянно растет до определенного предела потом остается примерно постоянной вне зависимости от размера файла.
Чем объяснить данный рост??? Почему маленькие файлы загружается медленнее больших( ну относительно конечно )
Profile CardPM
  0/0  
Snowm@n
post Nov 3 2010, 16:32 
Отправлено #3


O_o

Сообщений: 1 037



Цитата(sim1246 @ Nov 3 2010, 14:58)
Нечего толкового в литературе найти не удалось, сейчас проводим свои исследования. Я не очень разбираюсь в устройстве интернета и у меня еще тут один вопрос возник.
Мы загружаем файлы на сервер начиная с маленького и постепенного увеличиваем размер. Так вот при увеличения размера файла,  отношение объема файла к времени передачи файла ( не знаю можно ли это назвать скоростью передачи) постоянно растет до определенного предела потом остается примерно постоянной вне зависимости от размера файла.
Чем объяснить данный рост??? Почему маленькие файлы загружается медленнее больших( ну относительно конечно )
*
Ну это довольно очевидно. Для каждого файла, хоть большого, хоть маленького, существуют накладные расходы на установление соединения с сервером, причем они постоянны для любого размера файла. То есть рассматривая отношение V/(t+T), где T пропорционально V, исходя из постоянной скорости скачивания, то есть T=kV, получим V/(t+kV), что стремится к 1/k при увеличении V, причем в начале растет довольно быстро, потом все медленней, как и было замечено.
Ну а насчет алгоритма, могу посоветовать адаптивный вариант. То есть начинаем скачивание с определенным количеством потоков, через некоторое время пробуем добавить поток, и замеряем скоростью. Если скорость увеличилась то остаемся с этим количеством потоков, иначе пробуем уменьшить количество потоков, ну и так далее. Главное не слишком часто менять количество потоков, иначе скажутся накладные расходы.
Также можно посмотреть уже существующие менеджеры закачек, например DownloadMaster устанавливает количество потоков в зависимости от скорости интернет соединения, еще можно посмотреть открытые менеджеры закачек, в которых есть такая возможность.

Сообщение отредактировал Snowm@n - Nov 3 2010, 16:44

--------------------
Developer -> Lead Developer -> Lead Architect -> ... ?
Profile CardPM
  0/0  
sim1246
post Nov 4 2010, 19:09 
Отправлено #4


Продвинутый

Сообщений: 192



Цитата(Snowm@n @ Nov 3 2010, 16:32)
Ну это довольно очевидно. Для каждого файла, хоть большого, хоть маленького, существуют накладные расходы на установление соединения с сервером, причем они постоянны для любого размера файла. То есть рассматривая отношение V/(t+T), где T пропорционально V, исходя из постоянной скорости скачивания, то есть T=kV, получим V/(t+kV), что стремится к 1/k при увеличении V, причем в начале растет довольно быстро, потом все медленней, как и было замечено.
Ну а насчет алгоритма, могу посоветовать адаптивный вариант. То есть начинаем скачивание с определенным количеством потоков, через некоторое время пробуем добавить поток, и замеряем скоростью. Если скорость увеличилась то остаемся с этим количеством потоков, иначе пробуем уменьшить количество потоков, ну и так далее. Главное не слишком часто менять количество потоков, иначе скажутся накладные расходы.
Также можно посмотреть уже существующие менеджеры закачек, например DownloadMaster устанавливает количество потоков в зависимости от скорости интернет соединения, еще можно посмотреть открытые менеджеры закачек, в которых есть такая возможность.
*


Спасибо большое, за помощь
Profile CardPM
  0/0  
littlesavage
post Nov 7 2010, 20:01 
Отправлено #5


Эксперт

Сообщений: 698



Цитата(sim1246 @ Oct 29 2010, 19:28)
Привет всем!
Есть сервер на который нужно закачивать информацию, из разных мест, с разными скоростями интернета и т.д. Вообщем большие файлы не всегда удается закачать и их приходится делить на части. Кроме того система upload&download поддерживает многопоточность, качать и закачивать можно несколькими потоками.
*


Я бы посмотрел сначала на торренты/DC и прочие p2p.
Profile CardPM
  0/0  
sim1246
post Dec 25 2010, 11:03 
Отправлено #6


Продвинутый

Сообщений: 192



С алгоритмом вроде более менее разобрались, сделали так : сначала подбираем значение размера с маленькой точностью, на нем определяем количество потоков, а для определенного количества потоков ищем оптимальный размер уже с требуемой точностью.
Теперь хотим оптимизировать процесс по времени, ну чтобы не ждать когда же загрузится файлик или нет( ну типа чтобы если проблема сразу падало ). Выяснилось что на это сильно влияет такой socket timeout.

Обясните пожалуйста физическую сущность такого термина как socket timeout что такое socket вроде разобрались что ознаечает его timeout чего то не очень понятно, это время ответа сервера о том что запрос завершен или как ?
Profile CardPM
  0/0  
foo-bar
post Dec 25 2010, 12:49 
Отправлено #7


Активный

Сообщений: 1 370



Цитата(sim1246 @ Dec 25 2010, 11:03)
Обясните пожалуйста физическую сущность такого термина как socket timeout
*
По сути это время ожидания операций на сокете. Например, вы пытаетесь синхронно читать из сокета данные, а данных для чтения нет, тогда операция чтения будет ожидать появления данных в течение указанного таймаута.
Profile CardPM
  0/0  
sim1246
post Dec 27 2010, 16:16 
Отправлено #8


Продвинутый

Сообщений: 192



Цитата(foo-bar @ Dec 25 2010, 12:49)
По сути это время ожидания операций на сокете. Например, вы пытаетесь синхронно читать из сокета данные, а данных для чтения нет, тогда операция чтения будет ожидать появления данных в течение указанного таймаута.
*


Спасибо большое, теперь вроде все на свои места встало.
Profile CardPM
  0/0  
littlesavage
post Dec 30 2010, 21:03 
Отправлено #9


Эксперт

Сообщений: 698



Цитата(sim1246 @ Dec 25 2010, 11:03)
Обясните пожалуйста физическую сущность такого термина как socket timeout что такое socket вроде разобрались что ознаечает его timeout чего то не очень понятно, это время ответа сервера о том что запрос завершен  или как ?
*


Еще, кстати, можно посмотреть на протокол SCTP[1], там все это есть.

[1] http://ru.wikipedia.org/wiki/SCTP
Profile CardPM
  0/0  

ОтветитьTopic Options
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
Быстрый ответ
Кнопки кодов
 Расширенный режим
 Нормальный режим
    Закрыть все тэги


Открытых тэгов: 
Введите сообщение
Смайлики
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
smilie  smilie  smilie  smilie  smilie 
         
Показать все

Опции сообщения