Или это зависит исключительно от прокси?
Как избавиться от состояния гонки?
-
Использовать глобальные переменные, как глобальный объект не получится. По той причине что в БАСе глобальные переменные, это не переменные по факту, а запись в базе данных которая по идее подключена к планировщику (процесс Scheduler.exe) Он и создаёт пул потоков, он же оперирует ресурсами и мониторит их, ну т.е. по факту твои предположения верны.
@Lipstein said in Как избавиться от состояния гонки?:
Может Вы меня неправильно поняли: Я хочу обрабатывать глобальную переменную\базу, в отдельном асинхронном потоке, чтобы вносить в неё данный последовательно исходя из того, как их будут редактировать рабочие потоки, в которых и происходят все действия с ними, грубо говоря, что-то вроде списка Tasks, и что бы изменения данных было логичным, и не было состояния гонки, я хочу это делать исходя из хронологии внесения изменений. И вот именно что бы это всё не городить, я и задаю этот вопрос, может быть это можно сделать как-то попроще?
Вот это называется планировщик к слову, т.е. на этом базируется асинхронность любого приложения. На списке задач, который пополняется, и потом нужна функция обработчик задач. Но это слишком мудренно, согласен. Твою проблему проще всего решить так:
При добавлении нового аккаунта в интерфейсе создаётся файлик с его уникальным идентификатором в названии, потом при запуске этого аккаунта, этот уникальный идентификатор пулится в поток, и его можно юзать для общения между бэкэндом и фронт-эндом, такое себе АПИ на костылях. -
@mordor said in Как избавиться от состояния гонки?:
Использовать глобальные переменные, как глобальный объект не получится. По той причине что в БАСе глобальные переменные, это не переменные по факту, а запись в базе данных которая по идее подключена к планировщику (процесс Scheduler.exe) Он и создаёт пул потоков, он же оперирует ресурсами и мониторит их, ну т.е. по факту твои предположения верны.
Неверно. Глобальные переменные это всего лишь переменные в ОЗУ с глобальной областью видимости и к Scheduler.exe не имеют никакого отношения.
@mordor said in Как избавиться от состояния гонки?:
При добавлении нового аккаунта в интерфейсе
Если задача сводится к мониторингу изменения статуса аккаунта, то это можно сделать либо через БД либо через Events(События), если используется веб интерфейс. Через БД мы просто в начале работы потока получаем/создаем запись с данными нашего аккаунта и потом по ее id меняем статусы и тд. В каком месте тут может возникнуть состояние гонки непонятно, тк каждый поток работает со своей записью в БД, а интерфейс только читает эти данные и отображает в интерфейсе.
-
@Lipstein said in Как избавиться от состояния гонки?:
У меня допустим премиум, в котором я бы хотел сделать риалтайм отображение состояния потоков, не через дефолтный лог, а например, через красиво оформленный интерфейс с таблицей.
Обратите внимание на это действие:

-
@UserTrue Ну может быть и так, но ты не можешь написать в коде что-то вроде
[[GLOBAL:VAR]]["new propertie"] = "new propertie";Тебе сначала нужно вытащить из неё данные в локальную переменную, внести изменнения в эту локальную переменную, и перезаписать глобальную переменную. Поэтому тут может возникнуть гонка, либо нужно юзать лок, чего ТС явно не хочет.
@UserTrue said in Как избавиться от состояния гонки?:
Если задача сводится к мониторингу изменения статуса аккаунта, то это можно сделать либо через БД либо через Events(События), если используется веб интерфейс. Через БД мы просто в начале работы потока получаем/создаем запись с данными нашего аккаунта и потом по ее id меняем статусы и тд. В каком месте тут может возникнуть состояние гонки непонятно, тк каждый поток работает со своей записью в БД, а интерфейс только читает эти данные и отображает в интерфейсе.
Ну так или иначе, чувак не понимает как работает база данных. По сути в базах данных, действительно ведь есть сессии в каждой из которых видны внесённые изменения за определённый момент общения с БД, поэтому опять же, назвать это ахинией сложно. Просто человек, явно не до конца понимает как это устроено.
-
@Fox said in Как избавиться от состояния гонки?:
@Lipstein said in Как избавиться от состояния гонки?:
У меня допустим премиум, в котором я бы хотел сделать риалтайм отображение состояния потоков, не через дефолтный лог, а например, через красиво оформленный интерфейс с таблицей.
Обратите внимание на это действие:

Благодарю, не обращал внимания вообще на это действие до покупки премиума.
@mordor said in Как избавиться от состояния гонки?:
@UserTrue Ну может быть и так, но ты не можешь написать в коде что-то вроде
[[GLOBAL:VAR]]["new propertie"] = "new propertie";Тебе сначала нужно вытащить из неё данные в локальную переменную, внести изменнения в эту локальную переменную, и перезаписать глобальную переменную. Поэтому тут может возникнуть гонка, либо нужно юзать лок, чего ТС явно не хочет.
@UserTrue said in Как избавиться от состояния гонки?:
Если задача сводится к мониторингу изменения статуса аккаунта, то это можно сделать либо через БД либо через Events(События), если используется веб интерфейс. Через БД мы просто в начале работы потока получаем/создаем запись с данными нашего аккаунта и потом по ее id меняем статусы и тд. В каком месте тут может возникнуть состояние гонки непонятно, тк каждый поток работает со своей записью в БД, а интерфейс только читает эти данные и отображает в интерфейсе.
Ну так или иначе, чувак не понимает как работает база данных. По сути в базах данных, действительно ведь есть сессии в каждой из которых видны внесённые изменения за определённый момент общения с БД, поэтому опять же, назвать это ахинией сложно. Просто человек, явно не до конца понимает как это устроено.
Так и есть, я не до конца осведомлён в вопросах работы с БД. Тоже спасибо за помощь.
@UserTrue said in Как избавиться от состояния гонки?:
@mordor said in Как избавиться от состояния гонки?:
Использовать глобальные переменные, как глобальный объект не получится. По той причине что в БАСе глобальные переменные, это не переменные по факту, а запись в базе данных которая по идее подключена к планировщику (процесс Scheduler.exe) Он и создаёт пул потоков, он же оперирует ресурсами и мониторит их, ну т.е. по факту твои предположения верны.Неверно. Глобальные переменные это всего лишь переменные в ОЗУ с глобальной областью видимости и к Scheduler.exe не имеют никакого отношения.
@mordor said in Как избавиться от состояния гонки?:
При добавлении нового аккаунта в интерфейсе
Если задача сводится к мониторингу изменения статуса аккаунта, то это можно сделать либо через БД либо через Events(События), если используется веб интерфейс. Через БД мы просто в начале работы потока получаем/создаем запись с данными нашего аккаунта и потом по ее id меняем статусы и тд. В каком месте тут может возникнуть состояние гонки непонятно, тк каждый поток работает со своей записью в БД, а интерфейс только читает эти данные и отображает в интерфейсе.
И тебе спасибо, даже в режиме срача, удалось получить полезную инфу.
-
@mordor said in Как избавиться от состояния гонки?:
Тебе сначала нужно вытащить из неё данные в локальную переменную, внести изменнения в эту локальную переменную, и перезаписать глобальную переменную. Поэтому тут может возникнуть гонка, либо нужно юзать лок, чего ТС явно не хочет.
Вообще говоря можно изменить, если писать в выполнить код., то все выполниться в одном тике и не будет конфликтов, но я так обычно не делаю тк мне не кажется это красивым. И есть еще один минус, это JSON формат хранения глоб переменных и если в них много данных то это будет создавать нагрузку.
-
@UserTrue said in Как избавиться от состояния гонки?:
@mordor said in Как избавиться от состояния гонки?:
Тебе сначала нужно вытащить из неё данные в локальную переменную, внести изменнения в эту локальную переменную, и перезаписать глобальную переменную. Поэтому тут может возникнуть гонка, либо нужно юзать лок, чего ТС явно не хочет.
Вообще говоря можно изменить, если писать в выполнить код., то все выполниться в одном тике и не будет конфликтов, но я так обычно не делаю тк мне не кажется это красивым. И есть еще один минус, это JSON формат хранения глоб переменных и если в них много данных то это будет создавать нагрузку.

Может я что-то не так пишу?
При этом ни[[GLOBAL:LOG]]["name1"]ни
[[GLOBAL:LOG]].name1Не срабатывают.
-
@mordor said in Как избавиться от состояния гонки?:
@UserTrue said in Как избавиться от состояния гонки?:
@mordor said in Как избавиться от состояния гонки?:
Тебе сначала нужно вытащить из неё данные в локальную переменную, внести изменнения в эту локальную переменную, и перезаписать глобальную переменную. Поэтому тут может возникнуть гонка, либо нужно юзать лок, чего ТС явно не хочет.
Вообще говоря можно изменить, если писать в выполнить код., то все выполниться в одном тике и не будет конфликтов, но я так обычно не делаю тк мне не кажется это красивым. И есть еще один минус, это JSON формат хранения глоб переменных и если в них много данных то это будет создавать нагрузку.
Может я что-то не так пишу?
При этом ниLOG["name1"]ни
LOG.name1Не срабатывают.
json это строка, а не объект. Вы посмотрите код действия "Лог" с использованием глобальной переменной
-
Так ты опять же читаешь данные переменной в локальную переменную меняешь её и записываешь заново, если бы это был глобальный список, то нужен был бы ЛОК, что бы потоки не переписывали устаревшие данные (это в случае если список не пополняется, а меняются его данные по индексам именно).
-
@mordor Не нужен никакой лок, этот пример демонстрирует, что нет гонки и работа происходит синхронно, в противном случае, потоки бы перетерли данные в этой переменной и это было бы видно в логе, я не просто так сделал такой вывод лога.
И тут не имеет значения список тут или строка, я сделал через строку для упрощения примера.
-
@UserTrue said in Как избавиться от состояния гонки?:
@mordor Не нужен никакой лок, этот пример демонстрирует, что нет гонки и работа происходит синхронно, в противном случае, потоки бы перетерли данные в этой переменной и это было бы видно в логе, я не просто так сделал такой вывод лога.
И тут не имеет значения список тут или строка, я сделал через строку для упрощения примера.
Вотже бл*тство, ты себе представить не можешь сколько раз я мудрил лок, потому что думал что данные будут пересекаться из-за этой херни. Слушай, удали линку на свой проект, там в нём модули твои. что бы никто не подмутил, мало ли.
-
@mordor said in Как избавиться от состояния гонки?:
Вотже бл*тство, ты себе представить не можешь сколько раз я мудрил лок, потому что думал что данные будут пересекаться из-за этой херни.
Она перетрется только, если между чтением и установкой глоб переменной будет асинхронное действие
-
@mordor said in Как избавиться от состояния гонки?:
@UserTrue said in Как избавиться от состояния гонки?:
@mordor Не нужен никакой лок, этот пример демонстрирует, что нет гонки и работа происходит синхронно, в противном случае, потоки бы перетерли данные в этой переменной и это было бы видно в логе, я не просто так сделал такой вывод лога.
И тут не имеет значения список тут или строка, я сделал через строку для упрощения примера.
Вотже бл*тство, ты себе представить не можешь сколько раз я мудрил лок, потому что думал что данные будут пересекаться из-за этой херни. Слушай, удали линку на свой проект, там в нём модули твои. что бы никто не подмутил, мало ли.
Я где то на форуме уже приводил пример работы с объектом в глобальной переменной в многопотоке. Каждое свойство объекта - номер потока, значение - рандомная строка. Скрипт после установки значения спал случайное время и проверял изменилось ли значение. Если изменилось, то скрипт прерывался. В итоге я гонял 100 потоков 10 минут и ни одной ошибки не возникло
-
@Fox said in Как избавиться от состояния гонки?:
@mordor said in Как избавиться от состояния гонки?:
@UserTrue said in Как избавиться от состояния гонки?:
@mordor Не нужен никакой лок, этот пример демонстрирует, что нет гонки и работа происходит синхронно, в противном случае, потоки бы перетерли данные в этой переменной и это было бы видно в логе, я не просто так сделал такой вывод лога.
И тут не имеет значения список тут или строка, я сделал через строку для упрощения примера.
Вотже бл*тство, ты себе представить не можешь сколько раз я мудрил лок, потому что думал что данные будут пересекаться из-за этой херни. Слушай, удали линку на свой проект, там в нём модули твои. что бы никто не подмутил, мало ли.
Я где то на форуме уже приводил пример работы с объектом в глобальной переменной в многопотоке. Каждое свойство объекта - номер потока, значение - рандомная строка. Скрипт после установки значения спал случайное время и проверял изменилось ли значение. Если изменилось, то скрипт прерывался. В итоге я гонял 100 потоков 10 минут и ни одной ошибки не возникло
Буду очень благодарен, если дашь линку в личку.
-
@mordor said in Как избавиться от состояния гонки?:
@Fox said in Как избавиться от состояния гонки?:
@mordor said in Как избавиться от состояния гонки?:
@UserTrue said in Как избавиться от состояния гонки?:
@mordor Не нужен никакой лок, этот пример демонстрирует, что нет гонки и работа происходит синхронно, в противном случае, потоки бы перетерли данные в этой переменной и это было бы видно в логе, я не просто так сделал такой вывод лога.
И тут не имеет значения список тут или строка, я сделал через строку для упрощения примера.
Вотже бл*тство, ты себе представить не можешь сколько раз я мудрил лок, потому что думал что данные будут пересекаться из-за этой херни. Слушай, удали линку на свой проект, там в нём модули твои. что бы никто не подмутил, мало ли.
Я где то на форуме уже приводил пример работы с объектом в глобальной переменной в многопотоке. Каждое свойство объекта - номер потока, значение - рандомная строка. Скрипт после установки значения спал случайное время и проверял изменилось ли значение. Если изменилось, то скрипт прерывался. В итоге я гонял 100 потоков 10 минут и ни одной ошибки не возникло
Буду очень благодарен, если дашь линку в личку.
линку в личку? В смысле ссылку на личный чат со мной? Или ты про пример скрипта?
-
@Fox said in Как избавиться от состояния гонки?:
@mordor said in Как избавиться от состояния гонки?:
@Fox said in Как избавиться от состояния гонки?:
@mordor said in Как избавиться от состояния гонки?:
@UserTrue said in Как избавиться от состояния гонки?:
@mordor Не нужен никакой лок, этот пример демонстрирует, что нет гонки и работа происходит синхронно, в противном случае, потоки бы перетерли данные в этой переменной и это было бы видно в логе, я не просто так сделал такой вывод лога.
И тут не имеет значения список тут или строка, я сделал через строку для упрощения примера.
Вотже бл*тство, ты себе представить не можешь сколько раз я мудрил лок, потому что думал что данные будут пересекаться из-за этой херни. Слушай, удали линку на свой проект, там в нём модули твои. что бы никто не подмутил, мало ли.
Я где то на форуме уже приводил пример работы с объектом в глобальной переменной в многопотоке. Каждое свойство объекта - номер потока, значение - рандомная строка. Скрипт после установки значения спал случайное время и проверял изменилось ли значение. Если изменилось, то скрипт прерывался. В итоге я гонял 100 потоков 10 минут и ни одной ошибки не возникло
Буду очень благодарен, если дашь линку в личку.
линку в личку? В смысле ссылку на личный чат со мной? Или ты про пример скрипта?
Пример скрипта, или ссылку на тему где это обсуждается, было бы реально интересно почитать.
-
@FastSpace said in Как избавиться от состояния гонки?:
Для этих целей есть Mysql.
Хочешь серьёзную базу. Пора отвыкать от детского сада.Нафиг ты ее всем навязываешь? Она в 99% случаев нафиг не нужна и хватает БАСовской и в 1% тут уже на любителя, можно с БАСовской монго через дравер работать либо с другой БД хоть и mysql. С задачами которые для скриптов справится абсолютно любая БД!!!
