Алгоритм многопоточности

Nikol

Client
Регистрация
28.04.2013
Сообщения
184
Благодарностей
11
Баллы
18
Подскажите пожалуйста алгоритм многопоточности.
Есть ссылки 1-го, 2-го, 3-го и 4-го уровней
Я захожу на ссылку 1-го уровня и парсю ссылки 2-го уровня. Кладу их в список_1 (получается примерно 300 ссылок).
Затем беру из списка_1 ссылки второго уровня по одной с удалением и парсю ссылки 3-го уровня. Кладу их в список_2 (получается примерно 5000)
Затем беру из списка_2 ссылки 3-го уровня по одной с удалением и парсю ссылки 4-го уровня. Кладу их в список_3 (конечный). Получается примерно 700000 ссылок.
Когда проект работает в один поток - долго, но все нормально.
Когда включаешь много потоков, то как я предполагаю, логика дает сбой.
Какой в этой задаче должен быть правильный алгоритм. Можно его выполнить в одном проекте или разделить и запускать несколько.
Вообще как правильно можно решить эту задачу?
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Вам нужно реализовывать списки во внешних фаилах. Получается что у каждого потока свои собственные списки
 

Nikol

Client
Регистрация
28.04.2013
Сообщения
184
Благодарностей
11
Баллы
18
Благодарю Вас, но честно говоря не увидел ответа.
Каждый поток заходит в список 1, 2 и 3. Получается путаница и сбой проекта.
Списки и так сохраняются во внешних файлах. Чтобы не было сбоя, как я думаю, необходимо создать проект1, который составит список 1. Затем можно запустить проект2, который в несколько потоков заберет ссылки из списка1 и положит новые ссылки в список 2. Потом запустить в несколько потоков проект3, который будет брать ссылки из списка 2 и формировать список 3.
Или как-то можно это сделать по другому, обеспечив многопоточность в одном проекте?
Можно ли запланировать в планировщике следование проектов один за другим по исполнении?
Не будут ли мешать друг другу проекты, работающие во многопотоковом режиме с одним списком?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 714
Баллы
113
Списки и так сохраняются во внешних файлах. Чтобы не было сбоя, как я думаю, необходимо создать проект1, который составит список 1. Затем можно запустить проект2, который в несколько потоков заберет ссылки из списка1 и положит новые ссылки в список 2. Потом запустить в несколько потоков проект3, который будет брать ссылки из списка 2 и формировать список 3.
Я бы сделал так.

Главное чтобы у вас во всех проектах списки были привязаны к файлу и стояли галки "загружать из списка" и "сохранять изменения".
 

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