Size: a a a

WebAssembly — русскоговорящее сообщество

2020 February 21

EO

Eugene Obrezkov in WebAssembly — русскоговорящее сообщество
Георгий
хах) да я ж шучу) но потоки действительно сложная штука, разве нет? это ж надо там, рисовать схемы взаимодействия потоков, вообще впринципе система в веб воркерах не такая уж плохая, сообщения, очереди. неплохой способ организации синхронизации потоков. ну всяко лучше чем там бездумно входить и выходить из критических секций. короче хз. я пытался использовать потоки, но моменты взаимодействиях нескольких потоков это всегда было что-то сложное. дедлоки там и прочее. потом там всякие lock-free, wait-free, хз, ну сложна, сложна
всё непонятное сложное - пока не разберешься
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
неужели есть какой-то простой способ организовать работу потоков в каком-нибудь, например, игровом сервере. например вот есть NPC и есть игрок - событие: игрок бьет NPC, у игрока надо уменьшить запас сил, а у NPC количество хп. сначала блокируем игрока для изменения, потом блокируем NPC. производим действия, разблокируем в обратом порядке. а потом где-нибудь будет код который сначала блокирует NPC, а потом игрока, и всё, дедлок, и прочая срань. но да, я действительно в этом не разобрался. может как-то можно всё проще сделать
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Георгий
неужели есть какой-то простой способ организовать работу потоков в каком-нибудь, например, игровом сервере. например вот есть NPC и есть игрок - событие: игрок бьет NPC, у игрока надо уменьшить запас сил, а у NPC количество хп. сначала блокируем игрока для изменения, потом блокируем NPC. производим действия, разблокируем в обратом порядке. а потом где-нибудь будет код который сначала блокирует NPC, а потом игрока, и всё, дедлок, и прочая срань. но да, я действительно в этом не разобрался. может как-то можно всё проще сделать
Software Transactional Memory. 😉
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Хотя для распределённого игравого стейта на нескольких серваках скорее CRDT подойдут.
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
не, на одном
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
ну слушай, походу это что-то крутое. почитаю
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
На одном тоже можно CRDT и Event Sourcing всякий. Или CQRS какой-нибудь.
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Только к потокам это относится постольку поскольку. Т.е. особо и не относится. 😊
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
паготь, как же так?
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
ну хз. ты использовал что-то из выше перечисленного?
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Такие дела. (c) 😂
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
STM на Haskell и в примерах на Clojure.
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
ну т.е. насколько это всё реально применять в проекте? вполне или это те технологии о которых больше говорят чем используют?
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
Георгий
ну т.е. насколько это всё реально применять в проекте? вполне или это те технологии о которых больше говорят чем используют?
Я не знаю, чем Вы занимаетесь, но в распределённых системах Event Sourcing, CQRS и CRDT применяют сплошь и рядом налево и направо. Особенно в базах данных. 🤷‍♀️
источник

AT

Alexander Tchitchigin in WebAssembly — русскоговорящее сообщество
STM по факту используют только в Haskell, поскольку на остальных языках она безбожно тормозит.
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
ладно, согласен. STM довольно крутая штука судя по описанию
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
и она довольно крута для игры где все взаимодействует со всем одновременно но при этом в основном это некая пара. типо игрок-нпс, игрок-вещь, игрок-игрок, эффект-игрок и тд. там реально можно не парится большую часть времени
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
но я видел кое что покруче STM, когда человек просто берет Java и фигачит многопоточный код, промежуточные состояния там, ошибки, некорректные изменения состояний нкастолько редкие что можно ниче не логировать, не проверять и не откатывать
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Так CRDT и delta-CRDT это вообще не про потоки, а про то, как синхронизировать общее состояния между работающие узлами, по сути это алгоритм координации. Например есть p2p сеть с некоторой задержкой и нужно синхронизировать работу двух клиентов так, что бы они могли менять данные у себя, и видить изменения другого, при этом не перезаписывая или не теряя состояния, а также в правильной последовательности (скажем для журналирования и возможности отката). Можно ли это использовать для синхронизации потоков? Наверное можно, но зачем такие накладные расходы, когда намного эффективнее использовать read / write memory barrier?
источник

Г

Георгий in WebAssembly — русскоговорящее сообщество
согласен что неэффективно так будет. memory barrier опять хз что такое. надо читать)
источник