Добавил еще ведущие нули к миллисекундам, если кому-то еще когда-то этот код понадобится
log = function (text, color, define){ var id, time, thread, logHtml, textLog; define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define; if(typeof define === 'object' && define !== null){ if(Array.isArray(define)){ id = define.indexOf('id') > -1; time = define.indexOf('time') > -1; thread = define.indexOf('thread') > -1; } else{ id = define.id == true; time = define.time == true; thread = define.thread == true; } } else id = time = thread = true; id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : ''; time = time ? ' ' + getTime() : ''; thread = thread ? ' Поток №' + thread_number() : ''; logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : ''; logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>'; textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text function getTime(){ var checkTime = function(i){ return (i < 10) ? "0" + i : i; }; var checkMilliSeconds = function(ms){ if (ms < 10) { return "00" + ms; } else if (ms < 100) { return "0" + ms; } else { return ms; } }; var d = new Date(); var hh = checkTime(d.getHours()); var mm = checkTime(d.getMinutes()); var ss = checkTime(d.getSeconds()); var ms = checkMilliSeconds(d.getMilliseconds()); return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']'; }; Logger.WriteHtml(logHtml, textLog); }Бас Шалит в Многопотке
-
Пробовал запускать 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
-
@UserTrue said in Бас Шалит в Многопотке:
@sergerdn said in Бас Шалит в Многопотке:
И, так как я не специалист в NodeJs, вероятно, могу сильно ошибаться и ты можешь написать мне: все это фигня, оно работает не так, как ты думаешь.
Один из вариантов работы с тредами https://github.com/metarhia/noroutine
Спасибо большое, занес в закладки.
