javascript - 是否存在由工作线程填充的阻塞 ArrayBuffer?
问题描述
我想使用ion-js,但它是字符串或 ArrayBuffers 上的同步库,而不是 Stream 或 ReadableStream。
我想使用 worker_threads、SharedArrayBuffer 和 Atomics 来创建一个填充在后台线程中并阻塞等待字节的 ArrayBuffer。
class BlockingArrayBuffer implements ArrayBuffer {
constructor(
private readonly dataBuffer: Uint8Array,
private readonly availableBytes: Int32Array,
) { }
get byteLength(): number {
return this.dataBuffer.byteLength;
}
slice(begin: number, end: number = this.byteLength): ArrayBuffer {
// calls Atomics.wait till availableBytes is greater than begin and end.
this.blockTillAvailable(Math.max(begin, end));
return this.dataBuffer.slice(begin, end);
}
}
有一个未显示的工作线程读取流并更新支持 dataBuffer 和 availableBytes 的两个共享数组缓冲区。
当我直接调用 slice 时,这实际上有效。
const {dataBuffer, availableBytes} = await makeWorker();
const blocking = new BlockingArrayBuffer(dataBuffer, availableBytes);
blocking.slice(0, 10); // completes quickly.
blocking.slice(0); // blocks till buffer is full.
但是,当我用类型化数组包装阻塞数组时它不起作用
console.log(blocking.slice(0)); // prints filled array
console.log(new Uint8Array(blocking).slice(0)); // Uint8Array(0) []
解决方案
推荐阅读
- javascript - 无法使用 map() 方法在 React JS 上循环状态
- python - 设置 Treeview 的 rowheight 会使其他小部件在网格中不可见。为什么会发生这种情况
- wordpress - 更改插件设计 wp-crowdfunding
- visual-studio-code - 当我从 GUI 单击运行/调试时,如何强制 VSCode 使用特定终端?
- javascript - Oracle HRMS 如何获取职位的完整描述?
- visual-studio-code - 有没有办法在调试时直接查看字符串的值?(VS代码)
- python - ValueError:试图将“张量”转换为张量并失败。错误:无法创建内容大于 2GB 的张量原型
- c - 谁能解释以下程序的输出
- javascript - algoliaserach 钉合下一页,偏移页
- sql - 消息 206,级别 16,状态 2,第 1 行操作数类型冲突:文本与 tinyint 不兼容