Best practices: threads или циклы или...?

Hartwell

Client
Joined
Sep 25, 2014
Messages
194
Reaction score
117
Points
43
Некого рода "bottleneck" в моих мыслях по след.:

Допустим у нас есть небольшой цикл включающий:
0) Проект без использования бразузера
1) Get string из списка (с удалением)
2) Proxy из списка (без удаления, random)
3) POST query с ответом
4) Логическое IF с переменной ответа POST запроса
Ну логично если успешно - заносим стринг в список, завершаем проект.


Ну и тут после пару часов тестов все-же интересен вариант с максимальным КПД.

!! Производительность железа была с запасом в 2 раза больше тестируемого макс. кол-во потоков, канал интернета загружался не более чем на 20-25%. Эти факторы не нужно учитывать и вообще брать во внимание!!

Что будет давать максимальное кол-во итераций за равномерный отрезок времени:
1.1 Добавить цикл внутри проекта (допустим 25-50 повторений) или выполнение проекта до конечного рез-та 1 раз (меняется профиль, берутся данные, отправляем POST и решаем успех или нет, конец действия)?
1.2 Отсюда смежный вытекающий вопрос насчет кол-во потоков их приоритет?

2. По входным данным вопрос, а конкретно из пункта " 1) " в описании проекта, в начале поста. Предположим есть список в 100мб и 10 списков в 10мб. Так как необходимо удаление строк - выходит постоянное обращение и сохранение файла, что несомненно отразиться на всей производительности проекта. Какой вариант эффективней?
Или же остается вариант - загружать в оперативную память (не отмечать галочкой "сохранить изменения"), но сразу возвращаемся к вопросу "1.1". Конкретнее: в случае выгрузки в ОЗУ остается только бесконечное зацикливание.

По итогам тестов на самом деле не очень понятна реальная картина. Без циклирования - быстрее "съедается" входной список. С циклами в 1000 потоков нагружается канал интернета, к тому-же пропорционально что при 100 потоках что при 250, 500 и 1000.
Возможно увеличение потоков даст больший профит.. но тут уже скорее вопрос к девелоперам продукта! Конкретнее намекаю на конфликты при увеличение потоков/процессов.
 

rostonix

Известная личность
Joined
Dec 23, 2011
Messages
29,067
Reaction score
5,707
Points
113
Правильнее делать небольшие шаблоны, без длительных итераций, ну или не больше 10, чтобы надежнее было.
Если нужны разные профили, то тогда без циклов, профиль выдается в начале запуска проекта.
Если много потоков, то списки однозначно синхронизированные с файлом (в свойствах списка прописан путь к файлу и стоят галки "загружать из файла"и "сохранять изменения"), иначе каждый поток создаст свою копию, а при размерах файлов в 100 метров, постер только и будет заниматься тем, что выделяет и освобождает память. Списки и таблицы неплохо оптимизированы, чтобы не убивать жесткий диск.
Можно при таких нагрузках даже заморочиться с глобальными переменными, и через глобальный счетчик читать построчно без удаления, чтобы еще уменьшить нагрузку на жесткий диск.
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)