Параллельное программирование / Синхронизация с использованием JavaScript Web Workers - PullRequest
5 голосов
/ 01 декабря 2011

Существуют ли примитивы синхронизации, такие как Барьеры , Семафоры , Блокировки , Мониторы , ... доступны в JavaScript / Web Workers или есть какая-то библиотека, позволяющая мне использовать такие вещи (я думаю о чем-то вроде java.util.concurrent в Java)?

Есть ли у Workers непонятные свойства, которые отличают их от Threads (например, могут ли они совместно использовать память с основным потоком)? Есть ли какой-то предел, сколько рабочих может быть создано (например, по соображениям безопасности или что-то в этом роде ...) Должен ли я заботиться о чем-то особенном?

Ответы [ 3 ]

3 голосов
/ 01 декабря 2011

Веб-работники не имеют понятия общей памяти; все сообщения, которые передаются между потоками, копируются. С учетом вышесказанного у вас нет барьеров, семафоров, замков и мониторов, потому что они вам не нужны в модели веб-работника.

Концепция разделяемой памяти была предложена еще в феврале 2011 года, но теперь ее состояние не меняется из-за сложности для разработчика => https://lists.webkit.org/pipermail/webkit-unassigned/2011-February/287595.html

Здесь также есть хорошая реклама о веб-работниках. http://blogs.msdn.com/b/ie/archive/2011/07/01/web-workers-in-ie10-background-javascript-makes-web-apps-faster.aspx

Надеюсь, это поможет

2 голосов
/ 28 августа 2012

Здесь у вас есть библиотека на основе jQuery, созданная для этой цели: http://www.megiddo.ch/jcon-q-rency.

Конечно, модель на самом деле не идентична java.util.concurrent, так как мы не имеем дело с той же средой, что иобъяснил в других ответах ...

2 голосов
/ 01 декабря 2011

Короче говоря: нет, в javascript нет никаких примитивов синхронизации, но они также не нужны, поскольку JavaScript по своей сути однопотоковый :). Рабочие могут получить доступ только к собственной области видимости (никаких манипуляций с dom, только вычисления) и отправлять сообщения в основной поток пользовательского интерфейса, где находится normal js. Я не уверен насчет максимального количества работников, но есть предел, вы можете попробовать его в браузере:)

Надеюсь, это поможет!

...