LINUX.ORG.RU

JavaScript + multi-threading - are mutexes needed?

 , ,


0

1

Как я смотрю по публикациям в Интернете, с 2010 года появились упоминания о Web workers в браузерах. То есть, JS стал уже реально многопоточным. Возникает проблема блокировок при модификации и доступе к не-атомарным данным.

Как быть?

На Хабре написано: <<Однако «параллельная задача» не значит что на десятиядерном процессоре ваш JavaScript заработает быстрее. JavaScript потоконейтрален, в спецификации ECMA не описано как JavaScript машина реализует многозадачность. Насколько я знаю, все существующие реализации JavaScript используют вариант многозадачности типа «Потоки в пространстве пользователя» (процессор быстро-быстро переключает задачи прерывая по таймеру внутри одного процесса) что однако не гарантирует что ядерная многопоточность никогда в будущем не сможет появиться и в JavaScript. Забегая вперёд скажу, что в конце концов потоки всё-таки насильно были введены в JavaScript немного странным образом через Web Worker...>>

Пример такой:

chrome.extension.onRequest.addListener(
  function (request, sender, sendResponse) {
    if(request && request.type == "check") {
      sendResponse({
        result: domains // отсылаем контент-скрипту массив в виде строки
      });
    }
  }
);
...
var i = 0;
// загрузка config.xml
window.setInterval(function() {
  domains.length = 0;
  // вот тут массив "пустой"
  domains = ...; // заполняем массив по-новой
  i++;
}, 2*1000); // in milliseconds
На stackoverflow предлагают реальный костыль в десять строк кода. =)

Имеет ли смысл заморачиваться в ближайшие 1-2 года над этим?

★★★★★

над чем? многие уже успешно это используют, но это нужно лишь для межвкладочных коммуникаций или тяжелыйх вычислений. жаваскрипт уже асинхронен setTimeout(threadStart, 0) или nextTick в ноде. какие мютексы, что несешь вообще?

trashymichael ★★★
()

есть еще разработка что-то там с массивами связано, типа мапредьюс какой-то нативный, от интела

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

но это нужно лишь для межвкладочных коммуникаций

мне именно для обмена между двумя скриптами и надо:
background.js <-> content_script.js

многие уже успешно это используют,

как именно, и что используют?

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

я тебе сразу про воркеры и говорил, только сдается мне ты костыли все какие-то городишь, и все там намного проще

trashymichael ★★★
()
Последнее исправление: trashymichael (всего исправлений: 1)
Ответ на: комментарий от trashymichael

писать в localStorage

о! Спасибо. Я про них забыл, по-сути дела это SQLite в хроме.
Всё, больше вопросов нет.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

по-моему это key-value стораж, но не уверен т.к. не юзал. но его уже почти все поддерживают, есть фолбеки на кукисы. расширения его и юзают для этих целей, да и сайты тоже.

trashymichael ★★★
()
Последнее исправление: trashymichael (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.