5

我现在正在使用 Isolates,想知道使用 IndexedDB 在 Isolates 之间共享数据是否是一种很好的沟通方式?具体来说,我希望一个 Isolate 能够写入它,然后告诉其他 Isolate 他们可以只读它。这些数据一旦被写入就会被认为是不变的并且相当大。我想这样做的主要原因是因为我不想将 6MB 映射发送到 3 个不同的 Isolate,因为它对程序有点密集。

4

2 回答 2

2

Web worker 允许您在 worker 之间传递数组缓冲区而无需复制。但是,一旦您将数组缓冲区传递给另一个工作人员,原始工作人员将失去对其内容的访问权限。

因此,您可以尝试将数据结构存储在数组缓冲区中以利用这一点。

请参阅这篇mdn 文章html5rocks

因此,对于 Dart,将您的数据存储在ByteData中,然后在通过 dartjs 编译时,不应复制,而是传输。

旁注:Mozilla 也在做一些实验,在多个网络工作者之间共享可变访问数组缓冲区。这是为了允许 emscripten 将多线程 c 代码编译为 javascript。这种共享访问可能需要一段时间才能标准化和广泛实施。

于 2014-02-16T23:34:50.650 回答
1

如果您想将数据存储在 IndexedDB 中,这很好。如果您这样做只是为了优化通信,我认为这不是直接发送的改进。序列化/反序列化通常是 CPU 最密集的部分。使用 IndexedDB 额外向慢速磁盘写入一次并从慢速磁盘读取三次。

于 2014-02-15T09:49:58.147 回答