javascript - 如何动态增加 SharedArrayBuffer 的大小
问题描述
我正在编写一个多线程程序。主线程不断接收网络数据,数据量比较大,所以使用子线程来处理数据。
接收到的数据是一个 100 字节的数据包。每次我收到一个数据包,我都会创建一个 100 字节的数据包SharedArrayBuffer
并通过postMessage()
. 但是主线程接收数据非常快,所以需要频繁调用postMessage通知子线程,导致CPU占用率高...影响主线程的响应速度
所以我在想,如果SharedArraybuffer可以动态增长,接收到的数据不断追加在SharedArrayBuffer的末尾,我只通知子线程一次,这样子线程也可以访问数据。
请问如何动态增加SharedArrayBuffer
. 我试图以链式方式实现它,将 SharedArrayBuffer 对象存储在另一个 SharedArrayBuffer 对象中,但浏览器不允许这样做。
解决方案
无法调整大小,只能通过类型化数组复制。
但实际上没有分配 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
推荐阅读
- javascript - 停止
我是编程界的新手,当教授点击“PLAY MUSIC”这个词时,他要求我停止弹出并在主页背景中播放音乐。我不知道该怎么做,尽管我已经尝试了很多。甚至有可能做到这一点吗?
- javascript - 如何在 nodejs 中创建签名的 webhook 请求?
- javascript - 将 JavaScript 代码添加到类似元素的问题
- php - 如何迭代嵌套的 JSON 对象
- mulesoft - 无法在 Flow Designer 中运行测试
- javascript - 反应引导布局问题
- oauth-2.0 - 如何修复“E_OAUTH_STATE_MISMATCH:Oauth 状态不匹配”
- r - 如何使用顺序过滤器的结果来识别更大的组
- rust - `__self` 是一个 `&` 引用,所以它所引用的数据不能被借用为可变的
- python - 绘制分类数据时如何告诉数据着色器对 NA 值使用灰色