我一直在努力了解演员模型和网络工作者的工作方式。
在https://dzone.com/articles/html5-web-workers-classic中: “Web Workers提供了一种消息传递模型,其中脚本只能通过明确定义的不可变消息进行通信,不共享任何数据,并且不使用同步机制来实现信令或数据完整性。”
对我而言,这听起来与演员模特非常相似。有区别吗?
更新: 根据Benjamin Erb的说法:
“参与者模型的基本思想是将actor用作可以以不同方式接收消息的并发原语:
1.向其他演员发送有限数量的消息 2.产生有限数量的新演员 3.更改自己的内部行为,在处理下一个传入消息时生效。“
前两个适用,但最后一个怎么样?
答案 0 :(得分:2)
是的,演员模型很好地描述了工人的工作方式。然而,actor模型有一些更抽象的要求也取决于你的实现 - 但我建议遵守actor模型。您可以阅读full article on Wikipedia。
我想告诉你一件事:
这取决于您的实施,我强烈建议您遵守此要求。这意味着,例如,如果以块的形式发送数据,则提供块索引。工作人员消息按照他们发送的顺序到达,但一旦您的代码变得复杂,最好不要依赖它。
这一点与前一种冲突。但至少读过一些网络工作者教程的人,答案很明显:是的,工人可以做到这一点。请考虑以下代码:
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,服务器持有锁。我不认为这是演员模特的例外。