是的,演员模型很好地描述了工人是如何工作的。然而,演员模型有一些更抽象的要求,也取决于你的实现——但我建议遵守演员模型。您可以阅读Wikipedia 上的完整文章。
不过,我想向您指出一件事:
这取决于您的实施,我强烈建议您遵守此要求。这意味着,例如,如果以块的形式发送数据,请给出块索引。Worker 消息按照它们发送的顺序到达,但是一旦你的代码变得复杂,最好不要依赖它。
更改自己的内部行为,在处理下一条传入消息时生效(根据您的“更新”)
这一点与前一点有冲突。但是任何至少阅读过一些 web workers 教程的人,答案是显而易见的:是的,worker 可以做到这一点。考虑以下代码:
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。
注意:有一些方法可以在 Worker 之间进行阻止,但这些都是 hack,不是有意的。我能想到的一个是服务器持有锁的异步 XHR。我不认为这算作演员模型的例外。