в npm есть либа https://www.npmjs.com/package/pdf-parse, подключить ее и выполнить код в Nodejs.
Бас Шалит в Многопотке
-
Другое подходящее название я подобрать не смог. Суть проблемы.
В каждом потоке бас играет в игру набирает скор. Бас выступает в роли человека то-есть логики действий - решает игру js код в кубике Яваскрипт и уже на основе этого решения бас делает ход.
И суть проблемы такова чем больше потоков запущено тем хуже бас играет. условно с одним запущеним потоком(1 поток- 1аккаунт - 1 гра(не связаны)) он наберёт 1000 скора а с 10 потоками только 200. Закономерность такова чем больше потоков работает там хуже он играет.В можете возразить и указать на такие возможные проблемы...
Ты загружаешь пк сильнее и бот от того хуже решает.- Нет. Бот запускается на машине где загрузка при 20 потоках не более 50%.
Ты используешь глобальные переменные и результаты между потоками мешаются. - Ни одна глобальная переменная не была использована. Боле того я тоже на это грешил поэтому в качестве переменной куда записывается решение выступает список и каждый поток пишет данные в свою ячейку хотя и список тоже свой в каждом потоке так как он не глобален, ну да ладно.
- Ты не приставил тестовый скрпит.
Бот настолько широк и интегрирован с игрой что тут либо только весь скрипт кидать, да и то нужны аккаунты в играх.
- Нет. Бот запускается на машине где загрузка при 20 потоках не более 50%.
-
Пробовал запускать 10 экземпляров скрипта одновременно? Можно скомпилированный скрипт положить в 10 папок и дать ему 10 разных аккаунтов.
P.S.
Доподлинно не знаю, как работает BAS с NodeJS/Javascript , но NodeJS/Javascript однопоточный, это значит, что в один времени выполняется только одно действие. Даже если в фоне в одном процессе NodeJS/Javascript запущены 10 promise, они работают по очереди.
Может быть твоя проблема как-то связана с этим.А может быть, наоборот, у тебя слишком много процессов и сама Ось постоянно переключает контексты между ними, что дает падение производительности/вычислений. Этот вариант маловероятен, так как обычно это приводит к полной загрузке CPU.
-
@sergerdn Это получается, по сути, 10 БАС окон. так нагрузка возрастает в разы. Я запускаю не компил а XML. Иногда мне кажется что он начинает брать ходы как с соседнего потока.. особенно если пытаешься относительно малое время ставить между запросом решения хода типу 2секудны и чем дольше пауза тем лучше, но возможно, я просто себя уже накрутил на эту мысль.
По поводу меток, да я их использую но не часто, в основном только при обработке ошибок чтобы перемещается в начало или конец, в зависимости от нужды. Основная логика в циклах.
-
@hvrsh said in Бас Шалит в Многопотке:
@sergerdn Это получается, по сути, 10 БАС окон. так нагрузка возрастает в разы.
Да, 10 окон. Если сильно возрастает нагрузка - это может значить, что моя гипотеза об однопоточности верна, так как в одной копии скрипта условно код ждет своей очереди на выполнение. А при множестве копий - равномерно распределяется по ядрам CPU и нагрузка возрастает, потому что в один момент времени выполняется больше инструкций, так как разные ядра CPU.
-
@rkk9 said in Бас Шалит в Многопотке:
@sergerdn ох уж этот node js
Запущенные скрипты из разных директорий работают каждый со своим инстансом nodejs, так что это честно может увеличить скорость работы при частом использовании ноды.
-
@biohacker01 said in Бас Шалит в Многопотке:
@Fox Можно добиться такого же, не разможная на много папок все ?.
Как то запускать изолированные инстатны с каждым своим nodejs ?Нет
-
@biohacker01 можно запускать worker treads в nodejs https://nodejs.org/dist/latest-v18.x/docs/api/worker_threads.html
-
@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. -
@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
