Данные из ресурса берутся с задержкой

Поддержка
  • У меня проблема: потоки забирают данные из ресурса НЕ моментально!

    Те предположим реальная задача: необходимо чтобы часть потоков решали капчу и добавляли в ресурс ключ капчи.
    Остальные потоки этот ключ брали и работали с ним.

    Первый вариант ставим галочку ждать ресурс:
    1.png
    исходник testres1.xml
    Задержка ~5сек потоки ждут %)

    Окау...второй вариант не ставим галочку "Ждать ресурс" зацикливаем onlyfail
    testres2.xml
    Как бы результат особо не меняется. Задержка ~5сек.

    Как сделать, чтобы как только добавился ресурс, он был сразу схвачен любым потоком?

  • Создай ресурс "из файла" и укажи здесь 0, выбери просто пустой файл.
    image.png
    В него уже добавляй ключи.

  • @Valerax

    [117193171] [16:17:23] Поток №100 : add 8045
    [117193171] [16:17:24] Поток №45 : add 9235
    [117193171] [16:17:24] Поток №81 : add 8764
    [117193171] [16:17:24] Поток №90 : add 8952
    [117193171] [16:17:24] Поток №72 : add 9238
    [117193171] [16:17:24] Поток №94 : add 8983
    [192183382] [16:17:24] Поток №1 : Теперь я взял 4394 за 5сек
    [192183382] [16:17:24] Поток №8 : Теперь я взял 4397 за 5сек
    [192183382] [16:17:24] Поток №9 : Теперь я взял 4644 за 5сек
    [192183382] [16:17:24] Поток №10 : Теперь я взял 4669 за 5сек
    [192183382] [16:17:24] Поток №11 : Теперь я взял 4718 за 5сек
    

    testres1.xml

    Первые пару строк берутся за 0сек, остальные ~5сек и более.

  • Есть у кого идеи?

  • @000 Сами Потоки уже давненько сделано запуск с Задержкой и вот видимо чем больше их и на остальных уже просто Внутренняя их задержка.
    Не помню с какой версии БАС но есть такое и описывали для чего мол это.
    Скорей всего вот оно и есть :)
    Хотя может и ещё кто что подскажет.
    Тему поднял вам :)

  • @000 said in Данные из ресурса берутся с задержкой:

    Есть у кого идеи?

    Сейчас буду разбираться. Временное решение - используйте глобальную переменную. Проверил, время между записью одним потоком и получением данных другим из глобальной переменной занимает не больше 10мс при 100 потоков

    Скрипт для проверки: 3162.xml

    50a6dec5-99c0-4241-93dd-b5c27fec4d81-изображение.png

  • Хмм, сейчас создал свой скрипт по вашей задаче "необходимо чтобы часть потоков решали капчу и добавляли в ресурс ключ капчи.
    Остальные потоки этот ключ брали и работали с ним". Локальный ресурс заполняется первым потоком, остальные потоки выводят его в лог и это происходит мгновенно, разница во времени перед взятием ресурса и после 0-1мс

    4f76f495-9127-4d76-b229-b332220d2a8d-изображение.png

    Переделал скрипт, добавил ситуацию, когда элементов в ресурсе долго нет, в результате получилась задержка в 5 секунд, иногда даже 10 секунд

    2d36037a-7024-4f2d-99de-9aeac37abf8d-изображение.png

    Скрипт для проверки: 3164.xml

    Время ожидания получения данных из ресурса кратно 5 секундам, значит это прописанное время ожидания в цикле проверки доступности данных ресурса. Посмотрел js код получения ресурса, в нём нет циклов и ожидания, значит оно на стороне C++, а это значит что просто так эту логику не исправить. Найдя и исправив нужный параметр на C++ нужно будет собирать отдельный билд и работать с ним..

  • @Fox
    Большое спасибо за информацию.
    Я думал где-то мой косяк...

    5сек довольно существенно(( особенно если задача другая:

    "Запись к врачу": 100/1000 потоков проверяют календарь.
    5потоков ждут когда в календарь добавятся даты и регистрируют клиента.
    Правда тут с глобалкой можно обойтись.

  • @000 said in Данные из ресурса берутся с задержкой:

    @Fox
    Большое спасибо за информацию.
    Я думал где-то мой косяк...

    5сек довольно существенно(( особенно если задача другая:

    "Запись к врачу": 100/1000 потоков проверяют календарь.
    5потоков ждут когда в календарь добавятся даты и регистрируют клиента.
    Правда тут с глобалкой можно обойтись.

    Оказалось, косяк именно в логике, когда поток получил строку, она не будет удалена из ресурса пока используется в этом потоке. И эта строка будет удалена только когда получена следующая. Следовательно другие потоки могут ожидать, что когда строка перестанет использоваться, она достанется им. Поэтому будут ожидать эту строку. Это можно исправить если вызвать "Удалить текущий элемент"

    Тестовый скрипт: 3165.xml

    Время получения строки 0-1мс:

    80aa02ec-e92f-48cc-89a2-253d85c4db22-изображение.png

  • 1 Votes
    31 Posts
    2868 Views
  • 0 Votes
    1 Posts
    312 Views
  • 0 Votes
    5 Posts
    702 Views
  • 0 Votes
    3 Posts
    599 Views
  • 0 Votes
    6 Posts
    1459 Views