Логика выполнения шаблона

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63
Не могу понять логику выполнения шаблона.
Два цикла, один внутри другого.
В первом списке ссылки на списки ссылок для парсинга данных со страниц сайта.
Списки с удалением после взятия строки, с изменениями в файл.
Когда одним потоком и выполнять 1 раз - все понятно:
шаблон будет выполнять до тех пор, пока не обойдет оба цикла и обработает все их строки.
Теперь есть потоки и кол.раз выполнять.
Если 10 потоков и 1 раз выполнять? Или 1 поток и 10 раз выполнять?
Или сначала будет один список 10 потоками одновременно или как правильно?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Если выполнять 1 раз, то по логике, хоть 10, хоть 200 потоков ставьте - шаблон выполнится 1 раз одним потоком.
Отсюда следует, что количество выполнений должно быть >= количества потоков.
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63
А как правильно бы надо, чтобы использовать всю прелесть многопоточности?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
А как правильно бы надо, чтобы использовать всю прелесть многопоточности?
Вам же выше написали:
Отсюда следует, что количество выполнений должно быть >= количества потоков.
Хотите в 20 потоков - ставьте 20 на количество выполнений и 20 на макс. кол-во потоков.
Хотите в 10 потоков, но чтобы шаблон выполнился 50 раз - ставьте 50 на выполнение и 10 в макс. кол-во потоков.
и т.д.
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63
Да я саму физику не пойму.
Если шаблон с циклами и за один раз выбирает и складывает все, зачем ставить его выполнять в параллельные потоки ведь он будет делать тоже самое. Там где нет циклов - все понятно:
хоть одним потоком, но сто раз или сто потоков, но 1 раз. А как разруливаются циклы в потоках, чтобы синхронно было, без дублирования?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113
Да я саму физику не пойму.
Если шаблон с циклами и за один раз выбирает и складывает все, зачем ставить его выполнять в параллельные потоки ведь он будет делать тоже самое. Там где нет циклов - все понятно:
хоть одним потоком, но сто раз или сто потоков, но 1 раз. А как разруливаются циклы в потоках, чтобы синхронно было, без дублирования?
Если при запуске цикличного шаблона в многопотоке, он выполняет тоже самое. Значит так устроена его логика.
Как сделали - так и работает.

Используйте списки с удалением и глобальные переменные, чтобы была возможность разделять потоки.
 

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
Да я саму физику не пойму.
Если шаблон с циклами и за один раз выбирает и складывает все, зачем ставить его выполнять в параллельные потоки ведь он будет делать тоже самое. Там где нет циклов - все понятно:
хоть одним потоком, но сто раз или сто потоков, но 1 раз. А как разруливаются циклы в потоках, чтобы синхронно было, без дублирования?
Ты писал:

Два цикла, один внутри другого.
В первом списке ссылки на списки ссылок для парсинга данных со страниц сайта.
Списки с удалением после взятия строки, с изменениями в файл.
Я так понимаю, касание потоков возможно только при заборе ссылки с первого списка, поскольку по каждой ссылке из первого списка поток получает доступ к однозначно определяемому этой самой ссылкой набору данных, с которым поток может уже работать, не опасаясь конфликта с другими потоками. Хотя если сохранение в один файл идёт, то потоки будут и здесь соприкасаться, но поскольку идёт сохранение, то пока один поток сохраняет в общий файл, другие будут ждать очереди

Скорость достигается за счёт параллельной обработки информации, получаемой по ссылкам из первого списка. Т.е. 1-ый поток берёт первую ссылку из первого списка с удалением и обрабатывает всё, что получает по этой ссылке. Пока он это делает, 2-й поток берёт вторую ссылку из первого списка и обрабатывает данные, связанные с ней. 3-й поток с третьей, 4-ый с 4-ой и т.д. Т.е. 100 потоков сделают конечную работу в 100 раз быстрее, поскольку они будут параллельно обрабатывать 100 ссылок из первого списка и вложенные циклы, которые с ними связаны, а одному потоку пришлось бы всё это делать последовательно, соответственно конечное время сплюсовалось бы.

Вложенные 2-ые циклы же у тебя не пересекаются между собой (там же списки ссылок для парсинга данных с разных страниц сайта)? Правильно? Хотя это и не смертельно, но мы в скорости в итоге проиграли бы.

Чтобы бесконфликтно работало, у тебя сохранение изменений в файл уже организовано. И придётся уйти от первого цикла внутри проекта. Т.е. проект будет работать так: сначала берёт ссылку из первого списка, затем работает по второму циклу и выходит. Если не убрать первый цикл, то перезагрузки потока не будет, а значит и не перезагрузится изменённый первый список с забранными другими потоками ссылками, я так понимаю. При запуске проекта придётся выставить число повторов, соответствующее числу ссылок в первом списке, и число потоков, меньшее или равное, если возможностей хватит, числу строк в этом же списке.

Ты про физику процесса спрашивал. Если просто, то так:

Запустишь 10 потоков - каждый возьмёт по ссылке из первого списка и обработает, пройдя по всему шаблону. После завершения возьмут ещё по ссылке из первого списка и опять их отработают. Т.е. параллельно в работе будет 10 потоков и скорость вырастет в 10 раз. Если выставишь число потоков больше, то и скорость будет больше, находясь в прямой зависимости от числа потоков.

зачем ставить его выполнять в параллельные потоки ведь он будет делать тоже самое.
Они не будут делать то же самое, поскольку каждый поток будет работать со своей ссылкой из первого списка и информацией, связанной с ней.
 
Последнее редактирование:

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63
Спасибо всем, похоже разобрался. Еще один момент:
при многопоточном постинге время от времени слетают отдельные инстансы.
Я тогда устанавливаю число запусков с запасом, но понимаю что это не правильно.
Как правильно?
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)