Size: a a a

Compiler Development

2019 October 09

А

Алексей in Compiler Development
хоть и реализуются через потоки
источник

А

Алексей in Compiler Development
ну насколько я понимаю
источник

А

Алексей in Compiler Development
Andrei Kurosh
The Worker interface spawns real OS-level threads, and mindful programmers may be concerned that concurrency can cause “interesting” effects in your code if you aren't careful.

However, since web workers have carefully controlled communication points with other threads, it's actually very hard to cause concurrency problems. There's no access to non-threadsafe components or the DOM. And you have to pass specific data in and out of a thread through serialized objects. So you have to work really hard to cause problems in your code.
ну и в принципе тут примерно это и написано
источник

AK

Andrei Kurosh in Compiler Development
Во:
Data passed between the main page and workers is copied, not shared. Objects are serialized as they're handed to the worker, and subsequently, de-serialized on the other end. The page and worker do not share the same instance, so the end result is that a duplicate is created on each end. Most browsers implement this feature as structured cloning.
источник

EO

Eugene Obrezkov in Compiler Development
Andrei Kurosh
насколько я понял, воркер не может попортить переданный ему объект
да, они копируются между воркерами
источник

А

Алексей in Compiler Development
типичный IPC короче
источник

M

MaxGraey in Compiler Development
Andrei Kurosh
насколько я понял, воркер не может попортить переданный ему объект
Воркер нет, там общение через сообщения со структурным комированием. Но мы сейчас говорим про SharedArrayBuffer
источник

AK

Andrei Kurosh in Compiler Development
MaxGraey
Воркер нет, там общение через сообщения со структурным комированием. Но мы сейчас говорим про SharedArrayBuffer
ну так получается, что при передаче в воркер сообщения оно сериализуется и в нем копируется все, кроме SharedArrayBuffer
источник

AK

Andrei Kurosh in Compiler Development
и поэтому выходит что становятся нужны атомики
источник

M

MaxGraey in Compiler Development
Andrei Kurosh
ну так получается, что при передаче в воркер сообщения оно сериализуется и в нем копируется все, кроме SharedArrayBuffer
WebWorkers и SAB это немного разные подходы. До этого были только WW и нужно было что то более эффективное без постоянного копирования. Поэтому и был введен SAB а с ним и Atomics
источник

AK

Andrei Kurosh in Compiler Development
а как-то можно запустить в джиесе отдельный тред без воркера?
источник

EO

Eugene Obrezkov in Compiler Development
Andrei Kurosh
а как-то можно запустить в джиесе отдельный тред без воркера?
из самого жс нет
источник

M

MaxGraey in Compiler Development
"This proposal adds a simple form of shared memory to ECMAScript. Shared memory is being exposed in the form of a new SharedArrayBuffer type; the existing TypedArray and DataView types are adapted in such a way that they can be used to create views on shared memory. The new global Atomics object provides atomic operations on shared memory locations, including operations that can be used to create blocking synchronization primitives"

https://tc39.es/ecmascript_sharedmem/shmem.html
источник

AK

Andrei Kurosh in Compiler Development
значит WW и SAB это все-таки не разные подходы, а совместно используемые инструменты
источник

M

MaxGraey in Compiler Development
Andrei Kurosh
значит WW и SAB это все-таки не разные подходы, а совместно используемые инструменты
Да
источник

K

Kir in Compiler Development
источник

EO

Eugene Obrezkov in Compiler Development
Andrei Kurosh
значит WW и SAB это все-таки не разные подходы, а совместно используемые инструменты
да

ты можешь взять вьюхи данных и передавать их между воркерами
источник

EO

Eugene Obrezkov in Compiler Development
ну и одна из вьюх это SAB, если я правильно их понял
источник

AK

Andrei Kurosh in Compiler Development
ну все, разобрались, значит мое предположение о том что "все сериализуется, кроме SAB" оказалось верным
источник

МБ

Михаил Бахтерев in Compiler Development
MaxGraey
Во первых ja не однопоточный, по крайней мере во взрослых движках gc работает в отдельном потоке, по крайней мере несколько его фаз. Во вторых, при чем здесь конкуррентность или многопоточность к выводу типов (которые должны быть вообще компайл тайм)? Ну и вывести типы не всегда есть возможность
Речь не о реализации, а о спецификации языка. Когда другой поток не может изменить форму переменной или объекта это существенно упрощает статический анализ и вывод типов.
источник