Привет всем! Есть сервер на который нужно закачивать информацию, из разных мест, с разными скоростями интернета и т.д. Вообщем большие файлы не всегда удается закачать и их приходится делить на части. Кроме того система upload&download поддерживает многопоточность, качать и закачивать можно несколькими потоками. По какому алгоритму можно выбрать оптимальное количество потоков и число частей на которые бить файл. Я понимаю что вопрос наверное для целого научного исследования, но может кто нибудь знает хоть в какой литературе можно почитать про это. Заранее спасибо, всем откликнувшимся
Сообщение отредактировал Snowm@n - Apr 10 2011, 13:26
Нечего толкового в литературе найти не удалось, сейчас проводим свои исследования. Я не очень разбираюсь в устройстве интернета и у меня еще тут один вопрос возник. Мы загружаем файлы на сервер начиная с маленького и постепенного увеличиваем размер. Так вот при увеличения размера файла, отношение объема файла к времени передачи файла ( не знаю можно ли это назвать скоростью передачи) постоянно растет до определенного предела потом остается примерно постоянной вне зависимости от размера файла. Чем объяснить данный рост??? Почему маленькие файлы загружается медленнее больших( ну относительно конечно )
Нечего толкового в литературе найти не удалось, сейчас проводим свои исследования. Я не очень разбираюсь в устройстве интернета и у меня еще тут один вопрос возник. Мы загружаем файлы на сервер начиная с маленького и постепенного увеличиваем размер. Так вот при увеличения размера файла, отношение объема файла к времени передачи файла ( не знаю можно ли это назвать скоростью передачи) постоянно растет до определенного предела потом остается примерно постоянной вне зависимости от размера файла. Чем объяснить данный рост??? Почему маленькие файлы загружается медленнее больших( ну относительно конечно )
Ну это довольно очевидно. Для каждого файла, хоть большого, хоть маленького, существуют накладные расходы на установление соединения с сервером, причем они постоянны для любого размера файла. То есть рассматривая отношение 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 -> ... ?
Ну это довольно очевидно. Для каждого файла, хоть большого, хоть маленького, существуют накладные расходы на установление соединения с сервером, причем они постоянны для любого размера файла. То есть рассматривая отношение V/(t+T), где T пропорционально V, исходя из постоянной скорости скачивания, то есть T=kV, получим V/(t+kV), что стремится к 1/k при увеличении V, причем в начале растет довольно быстро, потом все медленней, как и было замечено. Ну а насчет алгоритма, могу посоветовать адаптивный вариант. То есть начинаем скачивание с определенным количеством потоков, через некоторое время пробуем добавить поток, и замеряем скоростью. Если скорость увеличилась то остаемся с этим количеством потоков, иначе пробуем уменьшить количество потоков, ну и так далее. Главное не слишком часто менять количество потоков, иначе скажутся накладные расходы. Также можно посмотреть уже существующие менеджеры закачек, например DownloadMaster устанавливает количество потоков в зависимости от скорости интернет соединения, еще можно посмотреть открытые менеджеры закачек, в которых есть такая возможность.
Привет всем! Есть сервер на который нужно закачивать информацию, из разных мест, с разными скоростями интернета и т.д. Вообщем большие файлы не всегда удается закачать и их приходится делить на части. Кроме того система upload&download поддерживает многопоточность, качать и закачивать можно несколькими потоками.
Я бы посмотрел сначала на торренты/DC и прочие p2p.
С алгоритмом вроде более менее разобрались, сделали так : сначала подбираем значение размера с маленькой точностью, на нем определяем количество потоков, а для определенного количества потоков ищем оптимальный размер уже с требуемой точностью. Теперь хотим оптимизировать процесс по времени, ну чтобы не ждать когда же загрузится файлик или нет( ну типа чтобы если проблема сразу падало ). Выяснилось что на это сильно влияет такой socket timeout.
Обясните пожалуйста физическую сущность такого термина как socket timeout что такое socket вроде разобрались что ознаечает его timeout чего то не очень понятно, это время ответа сервера о том что запрос завершен или как ?
Обясните пожалуйста физическую сущность такого термина как socket timeout
По сути это время ожидания операций на сокете. Например, вы пытаетесь синхронно читать из сокета данные, а данных для чтения нет, тогда операция чтения будет ожидать появления данных в течение указанного таймаута.
По сути это время ожидания операций на сокете. Например, вы пытаетесь синхронно читать из сокета данные, а данных для чтения нет, тогда операция чтения будет ожидать появления данных в течение указанного таймаута.
Спасибо большое, теперь вроде все на свои места встало.
Обясните пожалуйста физическую сущность такого термина как socket timeout что такое socket вроде разобрались что ознаечает его timeout чего то не очень понятно, это время ответа сервера о том что запрос завершен или как ?
Еще, кстати, можно посмотреть на протокол SCTP[1], там все это есть.