вобщем нашел решение. может кому-то будет тоже полезным:
var kykyky = [[IZ_PERV_POTOKA]]; PSet("basglobal", "IZ_PERV_GLOBALKA_POTOKA", JSON.stringify(kykyky))вввввввввв.png
Мой скрипт в процессе своей работы по задумке должен постоянно работать с БД, но в БАС есть возможность открыть только 1 подключение одновременно и сделать его глобальным вроде как тоже нельзя.
Сам вопрос собственно: как использовать модуль SQL(mssql) в нескольких потоках без синхронизации между потоками?
Синхронизация между потоками у меня уже реализована с помощью глобальной переменной, однако меня совершенно не устраивают образующиеся при этом задержки т.к. время выполнения 1 прогона скрипта около 5 минут и следовательно, все остальные потоки в это время не имеют доступ к БД. Кто-нибудь уже решал такую задачу?
@blackextype, модуль работает отдельно в каждом потоке. В каждом потоке при обращении открывается новое или используется старое соединение с базой данных, если эта база уже вызывалась в этом потоке и соединение не было закрыто.
@GhostZ Кстати у БАС есть прикол, это ограничение вроде бы в 256 потоков при использование ноды в каждом потоке, скорей всего это конечно не ограничение БАС, но если инициализоровать ноду в onApplication и нужные функции записать в global, тогда можно хоть в 1000 потоков работать и даже нагрузка снижается.
@UserTrue, SQL модуль как и FTP, Excel модули, сохраняет информацию о подключения в общий глобальный объект, но SQL и FTP модули в отличи от Excel записывают каждый поток в разное свойства объекта, а в Excel для одного файла используется одно и тоже свойство во всех потоках. Это сделано для боле быстрой работы SQL и FTP модулей в многопотоке и меньшего количества проблем.
Можно сделать одно соединение для нескольких потоков установив одинаковый id, SQL: _SQL_CONFIG.id = 'id', FTP: _FTP_CONNECTION_ID = 'id'. Но это может вызвать неожиданные ошибки и другие проблемы, так как такая работа не тестировалась.
@GhostZ said in Как использовать модуль SQL(mssql) в нескольких потоках без синхронизации между потоками?:
@UserTrue, SQL модуль как и FTP, Excel модули, сохраняет информацию о подключения в общий глобальный объект, но SQL и FTP модули в отличи от Excel записывают каждый поток в разное свойства объекта, а в Excel для одного файла используется одно и тоже свойство во всех потоках. Это сделано для боле быстрой работы SQL и FTP модулей в многопотоке и меньшего количества проблем.
Можно сделать одно соединение для нескольких потоков установив одинаковый id, SQL: _SQL_CONFIG.id = 'id', FTP: _FTP_CONNECTION_ID = 'id'. Но это может вызвать неожиданные ошибки и другие проблемы, так как такая работа не тестировалась.
Да не, дело не в подключение, ты можешь просто console.log('hi world') запустить потоков в 260 и нода в БАС начнет тайматуми сыпать. Ну это так может кому-то пригодится, наверное не многие запускают столько потоков, я запускаю ))
@UserTrue said in Как использовать модуль SQL(mssql) в нескольких потоках без синхронизации между потоками?:
Да не, дело не в подключение, ты можешь просто console.log('hi world') запустить потоков в 260 и нода в БАС начнет тайматуми сыпать
Ты наверное говоришь вот про эту тему https://community.bablosoft.com/topic/4162/node-js-таймаут
@Fox said in Как использовать модуль SQL(mssql) в нескольких потоках без синхронизации между потоками?:
@UserTrue said in Как использовать модуль SQL(mssql) в нескольких потоках без синхронизации между потоками?:
Да не, дело не в подключение, ты можешь просто console.log('hi world') запустить потоков в 260 и нода в БАС начнет тайматуми сыпать
Ты наверное говоришь вот про эту тему https://community.bablosoft.com/topic/4162/node-js-таймаут
Типо того, мы ее обсуждали вроде. Короче решаю это через global
@Fox @GhostZ
Вот один и тот же console.log('hi')
Работает
node260 good.xml
Не работает
node260 bad.xml
В реальных задачах, особенно с криптографией может на гораздо меньшем числе потокое такой случиться
@GhostZ У меня почему-то не работает, объясню на примере.
При старте скрипта в 2 потоках, 1 поток работает с БД нормально, но если не закрыть соединение, то когда 2 поток будет работать с БД вылетит ошибка
"Произошла ошибка : SequelizeConnectionError: Connection lost - read ECONNRESET"
С чем может быть связано и как фиксить?
@UserTrue said in Как использовать модуль SQL(mssql) в нескольких потоках без синхронизации между потоками?:
Кстати у БАС есть прикол, это ограничение вроде бы в 256 потоков при использование ноды в каждом потоке, скорей всего это конечно не ограничение БАС, но если инициализоровать ноду в onApplication и нужные функции записать в global, тогда можно хоть в 1000 потоков работать и даже нагрузка снижается.
До сих пор данный "прикол" не устранен)
@DEDOV said in Как использовать модуль SQL(mssql) в нескольких потоках без синхронизации между потоками?:
@UserTrue said in Как использовать модуль SQL(mssql) в нескольких потоках без синхронизации между потоками?:
Кстати у БАС есть прикол, это ограничение вроде бы в 256 потоков при использование ноды в каждом потоке, скорей всего это конечно не ограничение БАС, но если инициализоровать ноду в onApplication и нужные функции записать в global, тогда можно хоть в 1000 потоков работать и даже нагрузка снижается.
До сих пор данный "прикол" не устранен)
И? Я написал как это решить.