首页 > 解决方案 > 如何动态增加 SharedArrayBuffer 的大小

问题描述

我正在编写一个多线程程序。主线程不断接收网络数据,数据量比较大,所以使用子线程来处理数据。

接收到的数据是一个 100 字节的数据包。每次我收到一个数据包,我都会创建一个 100 字节的数据包SharedArrayBuffer并通过postMessage(). 但是主线程接收数据非常快,所以需要频繁调用postMessage通知子线程,导致CPU占用率高...影响主线程的响应速度

所以我在想,如果SharedArraybuffer可以动态增长,接收到的数据不断追加在SharedArrayBuffer的末尾,我只通知子线程一次,这样子线程也可以访问数据。

请问如何动态增加SharedArrayBuffer. 我试图以链式方式实现它,将 SharedArrayBuffer 对象存储在另一个 SharedArrayBuffer 对象中,但浏览器不允许这样做。

标签: javascriptsharedarraybuffer

解决方案


无法调整大小,只能通过类型化数组复制。

但实际上没有分配 RAM,直到实际使用 ram。在 Node.js (v14.14.0) 下,您可以看到内存使用量如何随着缓冲区的填充而逐渐增加,或者如果使用 array.fill,它基本上是如何立即使用的。

const sharedBuffer = new SharedArrayBuffer(512 * 1024 * 1024)
const array = new Uint8Array(sharedBuffer)

// array.fill(1) // Causes ram to be allocated right away

推荐阅读