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

Hartwell

Client
Регистрация
25.09.2014
Сообщения
194
Благодарностей
117
Баллы
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

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 712
Баллы
113
Правильнее делать небольшие шаблоны, без длительных итераций, ну или не больше 10, чтобы надежнее было.
Если нужны разные профили, то тогда без циклов, профиль выдается в начале запуска проекта.
Если много потоков, то списки однозначно синхронизированные с файлом (в свойствах списка прописан путь к файлу и стоят галки "загружать из файла"и "сохранять изменения"), иначе каждый поток создаст свою копию, а при размерах файлов в 100 метров, постер только и будет заниматься тем, что выделяет и освобождает память. Списки и таблицы неплохо оптимизированы, чтобы не убивать жесткий диск.
Можно при таких нагрузках даже заморочиться с глобальными переменными, и через глобальный счетчик читать построчно без удаления, чтобы еще уменьшить нагрузку на жесткий диск.
 

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