Бас Шалит в Многопотке

Поддержка
  • Другое подходящее название я подобрать не смог. Суть проблемы.
    В каждом потоке бас играет в игру набирает скор. Бас выступает в роли человека то-есть логики действий - решает игру js код в кубике Яваскрипт и уже на основе этого решения бас делает ход.
    И суть проблемы такова чем больше потоков запущено тем хуже бас играет. условно с одним запущеним потоком(1 поток- 1аккаунт - 1 гра(не связаны)) он наберёт 1000 скора а с 10 потоками только 200. Закономерность такова чем больше потоков работает там хуже он играет.

    В можете возразить и указать на такие возможные проблемы...
    Ты загружаешь пк сильнее и бот от того хуже решает.

    • Нет. Бот запускается на машине где загрузка при 20 потоках не более 50%.
      Ты используешь глобальные переменные и результаты между потоками мешаются.
    • Ни одна глобальная переменная не была использована. Боле того я тоже на это грешил поэтому в качестве переменной куда записывается решение выступает список и каждый поток пишет данные в свою ячейку хотя и список тоже свой в каждом потоке так как он не глобален, ну да ладно.
    • Ты не приставил тестовый скрпит.
      Бот настолько широк и интегрирован с игрой что тут либо только весь скрипт кидать, да и то нужны аккаунты в играх.
  • Возможно есть дубли меток - и бот скачет по ним. Ну сеть может проседать и тогда скорость может изменится например.

  • Просто надо почитать как бас использует ресурсы сервера. 99.9% форума ничего кроме ядер процессора и ОЗУ не слышали

  • @hvrsh

    Пробовал запускать 10 экземпляров скрипта одновременно? Можно скомпилированный скрипт положить в 10 папок и дать ему 10 разных аккаунтов.

    P.S.
    Доподлинно не знаю, как работает BAS с NodeJS/Javascript , но NodeJS/Javascript однопоточный, это значит, что в один времени выполняется только одно действие. Даже если в фоне в одном процессе NodeJS/Javascript запущены 10 promise, они работают по очереди.
    Может быть твоя проблема как-то связана с этим.

    А может быть, наоборот, у тебя слишком много процессов и сама Ось постоянно переключает контексты между ними, что дает падение производительности/вычислений. Этот вариант маловероятен, так как обычно это приводит к полной загрузке CPU.

  • @sergerdn Это получается, по сути, 10 БАС окон. так нагрузка возрастает в разы. Я запускаю не компил а XML. Иногда мне кажется что он начинает брать ходы как с соседнего потока.. особенно если пытаешься относительно малое время ставить между запросом решения хода типу 2секудны и чем дольше пауза тем лучше, но возможно, я просто себя уже накрутил на эту мысль.

    По поводу меток, да я их использую но не часто, в основном только при обработке ошибок чтобы перемещается в начало или конец, в зависимости от нужды. Основная логика в циклах.

  • @hvrsh советую попробовать сбилдить и открыть в несколько окон (с разных папок)

  • @hvrsh said in Бас Шалит в Многопотке:

    @sergerdn Это получается, по сути, 10 БАС окон. так нагрузка возрастает в разы.

    Да, 10 окон. Если сильно возрастает нагрузка - это может значить, что моя гипотеза об однопоточности верна, так как в одной копии скрипта условно код ждет своей очереди на выполнение. А при множестве копий - равномерно распределяется по ядрам CPU и нагрузка возрастает, потому что в один момент времени выполняется больше инструкций, так как разные ядра CPU.

  • @sergerdn ох уж этот node js

  • @rkk9 said in Бас Шалит в Многопотке:

    @sergerdn ох уж этот node js

    Запущенные скрипты из разных директорий работают каждый со своим инстансом nodejs, так что это честно может увеличить скорость работы при частом использовании ноды.

  • @Fox Можно добиться такого же, не разможная на много папок все ?.
    Как то запускать изолированные инстатны с каждым своим nodejs ?

  • @biohacker01 said in Бас Шалит в Многопотке:

    @Fox Можно добиться такого же, не разможная на много папок все ?.
    Как то запускать изолированные инстатны с каждым своим nodejs ?

    Нет

  • @biohacker01 можно запускать worker treads в nodejs https://nodejs.org/dist/latest-v18.x/docs/api/worker_threads.html

  • Ну и опять же, можно проверить то что более жрёт рессов, глобалки не глобалки ли :)

    image.png

  • @rkk9 said in Бас Шалит в Многопотке:

    @sergerdn ох уж этот node js

    Со своими нюансами, как и многие другие инструменты. На сервере я обычно ставлю спереди nginx, сзади него по кол-ву ядер CPU инстансы приложения. Неважно на чем оно написано, что python, что NodeJS.

    Это обычная практика.

  • @UserTrue said in Бас Шалит в Многопотке:

    @biohacker01 можно запускать worker treads в nodejs https://nodejs.org/dist/latest-v18.x/docs/api/worker_threads.html

    Интересно, как это все дело синхронизуется, чтобы не было race condition:
    Unlike child_process or cluster, worker_threads can share memory.

  • @sergerdn не обязательно же использовать общую память. А если все таки хочется то с помощью семафоров, мьютексов и тп

  • @UserTrue said in Бас Шалит в Многопотке:

    @sergerdn не обязательно же использовать общую память.

    Если не обязательно, то можно использовать _ child_process_, как самое простое в реализации(наверное). Стартовал поток в BAS, к нему стартовал child_process, закончил поток работу - child_process тоже закончил.

    Это будет не самый хороший вариант, так как будет нагрузка на CPU в момент старта потока, но для начала можно сделать и так. К тому же это даст хорошую изоляцию как между разными потоками, что работают в один времени, так и в момент старта нового потока, так как он получит свежий child_process.

    А потом уже можно сделать и shared worker pull и другие всякие "модные" вещи.

    Наверное, это надо делать на стороне BAS самим разработчиком.

  • @sergerdn said in Бас Шалит в Многопотке:

    сли не обязательно, то можно использовать _ child_process_, как самое простое в реализации(наверное). Стартовал поток в BAS, к нему стартовал child_process, закончил поток работу - child_process тоже закончил.

    Я как бы знаю что и как использовать,или это мысли в слух? ))

  • @UserTrue said in Бас Шалит в Многопотке:

    Я как бы знаю что и как использовать,или это мысли в слух? ))

    Ключевое:

    @sergerdn said in Бас Шалит в Многопотке:

    Наверное, это надо делать на стороне BAS самим разработчиком.

    И, так как я не специалист в NodeJs, вероятно, могу сильно ошибаться и ты можешь написать мне: все это фигня, оно работает не так, как ты думаешь.

    И я видел в этой теме Fox(специально не тегаю его, он ругается иногда). Это в том числе для него мысли.

  • @sergerdn said in Бас Шалит в Многопотке:

    И, так как я не специалист в NodeJs, вероятно, могу сильно ошибаться и ты можешь написать мне: все это фигня, оно работает не так, как ты думаешь.

    Один из вариантов работы с тредами https://github.com/metarhia/noroutine