Иногда при закачке какой-нибудь сложной области хотелось бы начинать качать не в один поток (а потом долго и нудно ручками перевыделять части нужного полигона, желательно непересекащиеся, чтобы стартануть параллельные потоки) - а просто поставить где-нибудь галочку "Автоматически разбить закачку на N потоков", кои все сразу и стартануть.
Предлагаю 500 рэ.
Разбивка выделения при закачке на части
Правила форума
Настоятельно рекомендуем ознакомиться с правилами раздела платных услуг ТУТ.
Настоятельно рекомендуем ознакомиться с правилами раздела платных услуг ТУТ.
- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Разбивка выделения при закачке на части
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


-
zed
- Гуру
- Сообщения: 2888
- Зарегистрирован: 16 авг 2008, 20:21
- Благодарил (а): 89 раз
- Поблагодарили: 568 раз
Re: Разбивка выделения при закачке на части
Т.е. ты хочешь автоматизировать процесс описанный вот здесь: Скачивание в несколько потоков ?
- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Re: Разбивка выделения при закачке на части
zed писал(а):Т.е. ты хочешь автоматизировать процесс описанный вот здесь: Скачивание в несколько потоков ?
Типа того, только не задействуя метки.
Если кратко - то я хочу, чтобы при выборе произвольного выделения к скачке - была бы возможность заранее задать число потоков, открываемых данной закачкой (и, соответственно, открывать столько же и окошек скачки). На настоящее время открывается всего 1 поток на 1 выделение - а я хочу, например, 10 неперекрывающихся sub-потоков, которые в сумме скачки дадут мне мой выделенный полигон.
Разбивать предлагаю по числу тайлов к скачке: при 100 тайлах к скачке и выборе 10 потоков на это задание - каждый, соответственно, откроет свое окошко закачки и закачает предназначенные только ему 10 тайлов\каждый. При выборе 100 потоков - 100 окошек откроются и скачают по 1му тайлу каждое.
PS: просто весьма и весьма достало обрисовывать ручками sub-полигоны (доп.процессы закачки) при прокачке какого-нибудь района весьма прихотливой формы так, чтобы и за границы всего выделения не вылезти и лишнего не накачать - и одновременно чтобы максимально эффективно разбить всю задачу между параллельными потоками. Вот есть, например, выделение "Россия" из гуглового КМЛа (полигон тысяч так на десяток-другой точек) - как мне её максимально эффективно выкачать в несколько [десятков] потоков, не вырисовывая\не открывая каждую область ручками отдельно, и не парясь с сохранением\переоткрытием сессий опять же ручками, если что-то сглючит в пути?
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Разбивка выделения при закачке на части
Parasite писал(а):Разбивать предлагаю по числу тайлов к скачке: при 100 тайлах к скачке и выборе 10 потоков на это задание - каждый, соответственно, откроет свое окошко закачки и закачает предназначенные только ему 10 тайлов\каждый. При выборе 100 потоков - 100 окошек откроются и скачают по 1му тайлу каждое.
Не, так точно реализовывать никто не будет. Максимум можно предложить разбиение на n полос равной высоты. Для каждой формируется прямоугольник и делается AND с исходным полигоном и результат передается в отдельную задачу на закачку. Некоторые тайлы на некоторых зумах будут попадать в 2 области, но что поделать.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Re: Разбивка выделения при закачке на части
vdemidov писал(а):Не, так точно реализовывать никто не будет.
Почему? В чем проблема?
При подсчете числа тайлов к конкретной закачке (мы же все равно их считаем заранее, перед скачкой?) и начале этой закачки - заранее "узнать", какие тайлы в какое из N окон передать и качать там. Ну, или как вариант - в каждое из открываемых окон передавать "начало старта - тайл XX, и до тайла YY", как это есть при сохранении\восстановлении сессии закачки (то есть, тупо сэмулировать восстановление N сессий "предыдущих закачек", с одним полигоном но разными стартовыми\конечными номерами тайлов в каждой). Ведь в .sls "точка возобновления закачки" же есть? Сделать и точку окончания (если нету), и воспользоваться этим механизмом при реализации сабжа.
vdemidov писал(а):Максимум можно предложить разбиение на n полос равной высоты.
Что делать с узкими закачками размером over100500 тайлов и шириной\длиной (смотря что ты имел ввиду под "полосами") <=1 тайл, то есть попадающими в понятие "полоса огромная, но таки все еще одна" - и желании разбить ее на десяток не таких огромных подзадач к скачке?
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Разбивка выделения при закачке на части
Parasite писал(а):Почему? В чем проблема?
При подсчете числа тайлов к конкретной закачке (мы же все равно их считаем заранее, перед скачкой?) и начале этой закачки - заранее "узнать", какие тайлы в какое из N окон передать и качать там.
В том, что подсчет числа тайлов идет уже в конкретной закачке и до ее запуска количества тайлов мы не знаем. А это долгая операция и в ГУЕ ее делать нельзя. А N закачек нужно запускать именно из ГУЯ.
Parasite писал(а):Что делать с узкими закачками размером over100500 тайлов и шириной\длиной (смотря что ты имел ввиду под "полосами") <=1 тайл, то есть попадающими в понятие "полоса огромная, но таки все еще одна" - и желании разбить ее на десяток не таких огромных подзадач к скачке?
Не разбивать их на части
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Re: Разбивка выделения при закачке на части
vdemidov писал(а):Parasite писал(а):Почему? В чем проблема?
При подсчете числа тайлов к конкретной закачке (мы же все равно их считаем заранее, перед скачкой?) и начале этой закачки - заранее "узнать", какие тайлы в какое из N окон передать и качать там.
В том, что подсчет числа тайлов идет уже в конкретной закачке и до ее запуска количества тайлов мы не знаем. А это долгая операция и в ГУЕ ее делать нельзя.
Ну так полигон-то юзер выделяет ОДИН, и N раз его весь пересчитывать для каждого потока-то зачем?
Выделил юзер полигон -> посчитали его ВЕСЬ и ОДИН раз, получили например 100 тайлов -> юзер вбил "Хочу 10 потоков", нажал на старт -> тайлы 0...9 уехали в одно окно (с указанными там же, внимание, 9ю тайлами к закачке), 10...19 во второе, итд до конца. Я ж потому и предлагаю разбивать по числу тайлов, а не по "полоскам" и прочим высокоуровнемым абстракциям (а вот их - да, придется обсчитывать и перегонять в число тайлов таки каждую).
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Разбивка выделения при закачке на части
Еще раз повторяю, подсчет тайлов идет после запуска отдельной закачки уже непосредственно в ней ибо сейчас может занимать часы времени. Простые методы распаралеливания закачки сводятся к автоматизации Скачивание в несколько потоков
Если предложенный вариант не устраивает, можешь закрывать тему на ближайшие пару лет
Ну или предлагать сумму больше на порядок
Parasite писал(а):Я ж потому и предлагаю разбивать по числу тайлов, а не по "полоскам" и прочим высокоуровнемым абстракциям
Если предложенный вариант не устраивает, можешь закрывать тему на ближайшие пару лет
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Re: Разбивка выделения при закачке на части
vdemidov писал(а):Еще раз повторяю, подсчет тайлов идет после запуска отдельной закачки уже непосредственно в ней
Ну так и стартуй ее - и сразу после старта открывай из нее дочерние окна.
Я даже готов на то, чтобы не отдельными окошечками - а доп.полосками в том же окне закачки, или как угодно еще (на свое усмотрение). Мне лишь надо, чтобы огромные выделения эффективно разбивались на части сами при старте, и стартовали разом по нажатию одной кнопки. Все остальное вторично.
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


Re: Разбивка выделения при закачке на части
Предлагаю не выдумывать себе сложности, чтобы потом их героические решать или отказываться от их решения, а делать максимально просто.
На N (10 и более) потоков - ОДНА очередь.
Число тайлов считается как сейчас - ОДНО.
Каждый рабочий поток просто знает, что ему надо брать не каждый тайл, а только такой тайл, где остаток от деления X+Y на N - его личный номер от 0 до N-1.
При желании можно взять не X+Y а чуть сложнее для равномерности исходя их области, это не принципиально.
Принципиально - остаток от деления на N.
Два потока никогда не схватят один и тот же файл.
Все файлы будут скачаны.
То что время завершения потоков будет не одинаковое - это не принципиально, в частности, если надо качать 4 тайла 10-ю потоками, то 6 из них сразу умрут.
voila.
На N (10 и более) потоков - ОДНА очередь.
Число тайлов считается как сейчас - ОДНО.
Каждый рабочий поток просто знает, что ему надо брать не каждый тайл, а только такой тайл, где остаток от деления X+Y на N - его личный номер от 0 до N-1.
При желании можно взять не X+Y а чуть сложнее для равномерности исходя их области, это не принципиально.
Принципиально - остаток от деления на N.
Два потока никогда не схватят один и тот же файл.
Все файлы будут скачаны.
То что время завершения потоков будет не одинаковое - это не принципиально, в частности, если надо качать 4 тайла 10-ю потоками, то 6 из них сразу умрут.
voila.