Пару вопросов о многопоточности

Vald

Client
Регистрация
18.12.2013
Сообщения
14
Благодарностей
0
Баллы
1
Спустя несколько лет пользования Зеннопостером, начал осваивать многопоточность и появилась пара вопросов.

Прочитал, что удобней всего делать через список с удалением - так в общем и сделал.
Проект работает по принципу: есть большой список сайтов, они по очереди берутся с удалением из txt файла и чекаются на нужные мне параметры, результат чека записывается в другой файл.
Конец выполнения - когда файл оказывается пустой.
В Зенке я ставлю проект, количество выполнений делаю равным количеству потоков. И вроде бы он работает. Правильно ли я все сделал?

Второй вопрос - можно ли как-то реализовать счетчик формата "линков в минуту" при многопоточности? Через глобальные переменные? Или лучше не заморачиваться с таким?
 

lederer

Client
Регистрация
13.04.2013
Сообщения
171
Благодарностей
85
Баллы
28
Здравствуйте!
"В Зенке я ставлю проект, количество выполнений делаю равным количеству потоков. И вроде бы он работает. Правильно ли я все сделал?"
- количество потоков должно быть равное либо больше чем количество выполнений
По своему опыту скажу, что если делаете "многопоток", то лучше не зацикливай проект, т.е: закончился весь цикл проекта-> запустили заново (со старта) - так не нужно делать.
Лучше всего сделать короткий цикл: взяли данные, прошли по алгоритму, завершили поток.

"Второй вопрос - можно ли как-то реализовать счетчик формата "линков в минуту" при многопоточности? Через глобальные переменные? Или лучше не заморачиваться с таким?"
Смотрите в сторону глобальных переменных, но чаще всего в этом нет необходимости во время разработки.
 
  • Спасибо
Реакции: Vald

Vald

Client
Регистрация
18.12.2013
Сообщения
14
Благодарностей
0
Баллы
1
Завершили поток - в смысле каждую итерацию завершаю как good end?
И тогда количество выполнений ставить равным количеству строчек в файле исходном?
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
532
Баллы
93
Завершили поток - в смысле каждую итерацию завершаю как good end?
И тогда количество выполнений ставить равным количеству строчек в файле исходном?
Каждый делает как себе удобнее конечно же, но Вам написали что лучше делать примерно так:
1. Количество выполнений - выставляете минус один. Это значит как бы бесконечное кол-во выполнений.
2. Настраиваете логику в шаблоне так, чтобы за 1 выполнение - у Вас обрабатывалась всего 1 строка из файла.
3. Если шаблон может завершится по ошибке - то при ошибке по Bad End лучше возвращать данные назад в файл. Так как данные берутся с удалением, как я понимаю. И потом разбираться что за ошибки возникают, почему. Ну и допиливать под это отдельную логику.
На форуме если поискать не один раз выкладывали примеры, когда для облегчения понимаю того, почему произошла ошибка - сохраняются все переменные, делается скрин инстансы и т.д.
4. После того как строки в файле закончились - значит все у Вас выполнилось и обрываете кол-во выполнений в 0 таким C# кодом
var id = Guid.Parse(project.TaskId);
ZennoPoster.SetTries(id, 0);

Если не хотите особо заморачиваться - то просто делаете так как описано в п.2, а количество выполнений - выставляете столько, сколько строк в исходном файле. Тогда шаблон работает быстрее и менее ресурсозатратно. Т.е. главное добиться того, чтобы в шаблоне не было длинных циклов и время на выполнение 1 потока от старта и до завершения - не затягивалось, а было максимально коротким.
 
  • Спасибо
Реакции: Vald

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