Javascript 如何在网络工作者之间有效地共享状态?

Javascript 如何在网络工作者之间有效地共享状态?,javascript,html,concurrency,web-worker,Javascript,Html,Concurrency,Web Worker,我正在考虑将游戏移植到HTML5,但我遇到了一些问题 游戏使用多线程,渲染在主线程上运行,脚本在工作线程上运行。多个脚本可以(并且经常)并发运行。它有相当数量的全局数据,任何脚本都可以访问,大部分是读取数据,但偶尔也可以写入数据。机制已经到位,以确保线程安全不成问题 看起来HTML5WebWorkers可以用来设置多线程,但要让全局数据正常工作将是一个大问题,因为在Workers之间共享数据似乎没有任何简单的方法。理论上,我可以将所有全局数据放在一个共享工作程序中,并让每个脚本工作程序向其发送消

我正在考虑将游戏移植到HTML5,但我遇到了一些问题

游戏使用多线程,渲染在主线程上运行,脚本在工作线程上运行。多个脚本可以(并且经常)并发运行。它有相当数量的全局数据,任何脚本都可以访问,大部分是读取数据,但偶尔也可以写入数据。机制已经到位,以确保线程安全不成问题

看起来HTML5WebWorkers可以用来设置多线程,但要让全局数据正常工作将是一个大问题,因为在Workers之间共享数据似乎没有任何简单的方法。理论上,我可以将所有全局数据放在一个共享工作程序中,并让每个脚本工作程序向其发送消息以获取和设置数据,但访问非常常见,消息传递开销会完全破坏性能,特别是因为简单的读操作比写操作要昂贵得多,并且可能需要某种类型的CPS实现才能使其正常工作


有什么好方法可以将这样的体系结构移植到HTML5和JavaScript中吗?

恐怕没有更好的方法了。正如Paul所说,WebWorkers提供了JavaScript中唯一的并发方法。您应该尽量减少共享数据。请注意,有些对象实际上是,这将阻止您复制结果,但由于您不想将状态的所有权转移给工作人员,因此对于一般问题可能没有用处。