500 потоков лагают | 250+250 летают



  • Всем привет) С басом работаю давно и достаточно глубоко разбираюсь.
    Но вот это понять ни как не могу:

    Есть скрипт, назовем его просто "парсер". Алгоритм такой - в настройках указываю папку с txt файлами, скрипт берет в цикле по 1 файлу, читает его в список, создает новый ресурс и читает этот список в новый ресурс (сделано для того, что бы строки из взятого txt можно было использовать в многопотоке).

    Далее запускается функция в многопотоке, в которой происходит простое действие - берется строка из нового ресурса, отправляется post-запрос, проверяется была ли ошибка в запросе и так по кругу.

    Проблема в том, что в 250 потоков пауза между запросами составляет 3 секунды, а если ставлю 500 потоков, то пауза уже 8-10 секунд. Можно было бы подумать на пропускную способность прокси, но если запускаю 2 копии скрипта по 250 потоков, то пауза как и прежде 3 секунды.

    Не понимаю совершенно в чем может быть причина. Дело происходит на сервере с Windows Server 2008.

    Возможно у кого-то было подобное, буду рад услышать любое мнение!



  • @gaget007 Давно заметил это и тоже запускаю в несколько копий.



  • Потому что браузеры сделали запуск в отдельных инстантах, а вот все остальное как запускалось в 1 файле так и запускается



  • @root Не совсем понял твой ответ. Можешь перефразировать?))



  • @gaget007 Весь многопоток это всего 1 файл.



  • @root Есть какое-то решение на твой взгляд, помимо запуска нескольких копий?



  • @root Я понял, что это работает скорей как асинхронные вызовы, у которых тоже есть своя очередь



  • @denis_krsk похоже на это больше всего (



  • @denis_krsk +


  • administrators

    @gaget007 Здравствуйте,

    1. В БАС есть инструмент для нахождения мест в скрипте, которые более всего влияют на производительность. Его можно запустить через Меню -> Отчеты -> Измерять время выполнения действий. Действия, которые будут находится вверху списка "тормозят" скрипт больше всего, и это может быть не только хттп запросы, но и, например, парсинг данных, либо не оптимизированная работа со списками. Только после того, как будет предоставлен такой отчет можно говорить об оптимизации.

    2. Если у вас в функции Main находится всего 1 запрос и больше ничего, то больше всего на производительность будет влиять не использование хттп клиента, а именно создание/пересоздание потока. Это можно легко исправить поместив выполнение запроса в цикл, то есть сделать так, чтобы поток пересоздавался через каждый 100/200 запросов, а не через каждый запрос. На больших скриптах такой проблемы не наблюдается, потому что потоки пересоздаются реже.

    3. Запланирован апдейт по хттп клиенту, который не будет создавать отдельных потоков для хттп клиента и таким образом улучшит производительность, но не нужно считать это универсальным решением, потому что проблем описанных в пунктах 1) и 2) это не решит.