网络工作者是否使用演员模型?

时间:2016-04-15 18:27:37

标签: html5 web-worker actor-model

我一直在努力了解演员模型和网络工作者的工作方式。

https://dzone.com/articles/html5-web-workers-classic中: “Web Workers提供了一种消息传递模型,其中脚本只能通过明确定义的不可变消息进行通信,不共享任何数据,并且不使用同步机制来实现信令或数据完整性。”

对我而言,这听起来与演员模特非常相似。有区别吗?

更新: 根据Benjamin Erb的说法:

“参与者模型的基本思想是将actor用作可以以不同方式接收消息的并发原语:

1.向其他演员发送有限数量的消息 2.产生有限数量的新演员 3.更改自己的内部行为,在处理下一个传入消息时生效。“

前两个适用,但最后一个怎么样?

1 个答案:

答案 0 :(得分:2)

是的,演员模型很好地描述了工人的工作方式。然而,actor模型有一些更抽象的要求也取决于你的实现 - 但我建议遵守actor模型。您可以阅读full article on Wikipedia

我想告诉你一件事:

No requirement on order of message arrival

这取决于您的实施,我强烈建议您遵守此要求。这意味着,例如,如果以块的形式发送数据,则提供块索引。工作人员消息按照他们发送的顺序到达,但一旦您的代码变得复杂,最好不要依赖它。

更改自己的内部行为,在处理下一条传入邮件时生效(根据您的"更新")

这一点与前一种冲突。但至少读过一些网络工作者教程的人,答案很明显:是的,工人可以做到这一点。请考虑以下代码:

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,服务器持有锁。我不认为这是演员模特的例外。