Используют ли веб-воркеры акторную модель?

Я пытался понять, как работают модели акторов и веб-воркеры.

В https://dzone.com/articles/html5-web-workers-classic: «Веб-воркеры обеспечивают модель передачи сообщений, в которой сценарии могут взаимодействовать только через четко определенные неизменяемые сообщения, не обмениваться данными и не использовать механизмы синхронизации для сигнализации или целостности данных».

Для меня это звучит очень похоже на актерскую модель. Есть ли разница?

ОБНОВЛЕНИЕ: По словам Бенджамина Эрба:

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

1.Отправлять конечное число сообщений другим субъектам.
2. Создавать конечное число новых участников.
3. Изменять собственное внутреннее поведение, вступая в силу при обработке следующего входящего сообщения."

Первые два применимы, а как насчет последнего?


person darjeelingtea    schedule 15.04.2016    source источник
comment
Я не совсем уверен, чем этот вопрос и ответы на него полезны для вас. Ты спрашиваешь, просто чтобы спросить? Насколько релевантны возможные различия?   -  person Tomáš Zato - Reinstate Monica    schedule 16.04.2016
comment
Мой интерес пока теоретический. Я пытаюсь сформировать мысленную карту концепций параллелизма. Я попытался выяснить, являются ли веб-воркеры актерами, и мне показалось странным, что они кажутся очень похожими, но модель акторов никогда не упоминается при обсуждении веб-воркеров.   -  person darjeelingtea    schedule 16.04.2016
comment
Я подозреваю, что это потому, что это никого не волнует. Для практических целей это не имеет значения, а для академических целей нет необходимости особо упоминать веб-воркеров. Кроме того, они были уверены, что не были специально созданы для того, чтобы быть актерами. Я даю вам -1, потому что ваше обновление вопроса ясно показывает, что вы даже не пытались в достаточной мере изучить, как работают рабочие. Я также голосую за то, чтобы этот вопрос был закрыт, поскольку я не вижу, какой именно ответ вы ожидаете и на чем он должен сосредоточиться. Я предлагаю вам попробовать традиционные форумы или [computer science.se] для создания ментальных карт. В SO мы фокусируемся на конкретных проблемах.   -  person Tomáš Zato - Reinstate Monica    schedule 16.04.2016
comment
Извините, я не понимаю, как мое обновление показывает, что я не пытался исследовать, как работают рабочие? Я искал несколько часов, прежде чем спросить, так что это не так. Не могли бы вы указать, есть ли что-то принципиально неправильное в моих рассуждениях? Насчет того, чтобы спросить не с того места, надо ли убрать этот вопрос?   -  person darjeelingtea    schedule 16.04.2016
comment
Не удаляйте вопрос, если не хотите. Все вышеизложенное является моим мнением, другие люди могут с ним не согласиться. Что я нашел неправильным, так это то, что если вы попытаетесь реализовать простой веб-воркер, вы, скорее всего, узнаете то, о чем спрашиваете. Вот что я называю исследованием. Гугление - это не исследование, имхо.   -  person Tomáš Zato - Reinstate Monica    schedule 16.04.2016


Ответы (1)


Да, акторная модель вполне описывает, как работают рабочие. Однако у акторной модели есть несколько более абстрактных требований, которые также зависят от вашей реализации, но я рекомендую соблюдать акторную модель. Вы можете прочитать полную статью в Википедии.

Однако есть одна вещь, которую я хотел бы указать вам:

Нет требований к порядку поступления сообщений

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

Измените собственное внутреннее поведение, вступив в силу при обработке следующего входящего сообщения (согласно вашему обновлению).

Этот пункт конфликтует с предыдущим. Но любой, кто хотя бы прочитал учебник по веб-воркерам, ответ очевиден: да, воркер может это сделать. Рассмотрим следующий код:

var name = "Worker";
self.addEventListener("message", (e)=>{
  if(typeof e.data.newName=="string") {
    name = e.data.newName;
  }
  if(e.data.command == "sendName") {
    self.postMessage({myName: name});
  }
});

Излишне говорить, что если вы отправите новое имя работнику, ответ на сообщения "sendName" будет отличаться от этого момента. Такое изменение поведения тривиально, но может быть сколь угодно сложным.


Если вас интересует акторная модель, см. также реализацию JavaScript Vert.x.

Примечание: существуют способы блокировки между рабочими, но это хакерские действия, и они не предназначены. Один из них, о котором я могу думать, это асинхронный XHR с сервером, удерживающим блокировку. Я не думаю, что это считается исключением для актерской модели.

person Tomáš Zato - Reinstate Monica    schedule 15.04.2016