Да я саму физику не пойму.
Если шаблон с циклами и за один раз выбирает и складывает все, зачем ставить его выполнять в параллельные потоки ведь он будет делать тоже самое. Там где нет циклов - все понятно:
хоть одним потоком, но сто раз или сто потоков, но 1 раз. А как разруливаются циклы в потоках, чтобы синхронно было, без дублирования?
Ты писал:
Два цикла, один внутри другого.
В первом списке ссылки на списки ссылок для парсинга данных со страниц сайта.
Списки с удалением после взятия строки, с изменениями в файл.
Я так понимаю, касание потоков возможно только при заборе ссылки с первого списка, поскольку по каждой ссылке из первого списка поток получает доступ к однозначно определяемому этой самой ссылкой набору данных, с которым поток может уже работать, не опасаясь конфликта с другими потоками. Хотя если сохранение в один файл идёт, то потоки будут и здесь соприкасаться, но поскольку идёт сохранение, то пока один поток сохраняет в общий файл, другие будут ждать очереди
Скорость достигается за счёт параллельной обработки информации, получаемой по ссылкам из первого списка. Т.е. 1-ый поток берёт первую ссылку из первого списка с удалением и обрабатывает всё, что получает по этой ссылке. Пока он это делает, 2-й поток берёт вторую ссылку из первого списка и обрабатывает данные, связанные с ней. 3-й поток с третьей, 4-ый с 4-ой и т.д. Т.е. 100 потоков сделают конечную работу в 100 раз быстрее, поскольку они будут параллельно обрабатывать 100 ссылок из первого списка и вложенные циклы, которые с ними связаны, а одному потоку пришлось бы всё это делать последовательно, соответственно конечное время сплюсовалось бы.
Вложенные 2-ые циклы же у тебя не пересекаются между собой (там же списки ссылок для парсинга данных с
разных страниц сайта)? Правильно? Хотя это и не смертельно, но мы в скорости в итоге проиграли бы.
Чтобы бесконфликтно работало, у тебя сохранение изменений в файл уже организовано. И придётся уйти от первого цикла внутри проекта. Т.е. проект будет работать так: сначала берёт ссылку из первого списка, затем работает по второму циклу и выходит. Если не убрать первый цикл, то перезагрузки потока не будет, а значит и не перезагрузится изменённый первый список с забранными другими потоками ссылками, я так понимаю. При запуске проекта придётся выставить число повторов, соответствующее числу ссылок в первом списке, и число потоков, меньшее или равное, если возможностей хватит, числу строк в этом же списке.
Ты про физику процесса спрашивал. Если просто, то так:
Запустишь 10 потоков - каждый возьмёт по ссылке из первого списка и обработает, пройдя по всему шаблону. После завершения возьмут ещё по ссылке из первого списка и опять их отработают. Т.е. параллельно в работе будет 10 потоков и скорость вырастет в 10 раз. Если выставишь число потоков больше, то и скорость будет больше, находясь в прямой зависимости от числа потоков.
зачем ставить его выполнять в параллельные потоки ведь он будет делать тоже самое.
Они не будут делать то же самое, поскольку каждый поток будет работать со своей ссылкой из первого списка и информацией, связанной с ней.