javascript / expert
Snippet
Zero-copy Datentransfer in Worker-Threads
Transferierbare Objekte ermöglichen das Verschieben von Daten zwischen Threads ohne Klonen, was für performante Node.js-Anwendungen entscheidend ist. Durch die Übergabe des ArrayBuffers im zweiten Argument von postMessage wird der Besitz übertragen, was eine nahezu sofortige Kommunikation ermöglicht, unabhängig von der Datengröße.
snippet.js
1
2
3
4
5
6
7
8
const { Worker } = require('worker_threads');const buffer = new ArrayBuffer(1024 * 1024); // 1MBconst worker = new Worker('./worker.js');// Transfer ownership, making 'buffer' inaccessible in the main threadworker.postMessage({ data: buffer }, [buffer]);console.log(buffer.byteLength); // 0
nodejs
Erklärung
1
worker.postMessage({ data: buffer }, [buffer]);
Das zweite Argument listet Objekte auf, die übertragen statt geklont werden sollen.
2
console.log(buffer.byteLength); // 0
Nach der Übertragung ist der ursprüngliche Puffer 'abgetrennt' und geleert.