javascript / expert
Snippet
Zero-Copy-Transfers via MessagePort
In Node.js Worker-Threads können Sie eine Transferliste (das zweite Argument von postMessage) verwenden, um Speicher zu verschieben, anstatt ihn zu klonen. Dies ist hocheffizient für große Datensätze, da der Overhead für das Kopieren von Bytes zwischen Threads entfällt.
snippet.js
1
2
3
4
5
6
7
8
9
const { Worker, MessageChannel } = require('node:worker_threads');const { port1, port2 } = new MessageChannel();const buffer = new Uint8Array(1024 * 1024 * 100); // 100MB// Transfer the underlying ArrayBuffer without copying dataport1.postMessage({ data: buffer }, [buffer.buffer]);console.log(buffer.byteLength); // 0 (Memory was moved, not copied)
nodejs
Erklärung
1
postMessage({ data: buffer }, [buffer.buffer])
Das zweite Argument gibt an, welche ArrayBuffers übertragen werden sollen.
2
buffer.byteLength
Nach der Übertragung wird der ursprüngliche Puffer abgetrennt und seine Länge wird Null.