javascript / expert
Snippet
Sperrfreie Konkurrenz mit Atomics
Beim Teilen von Speicher zwischen Node.js Worker-Threads via SharedArrayBuffer müssen Race Conditions vermieden werden. Die Atomics-API bietet threadsichere Operationen auf niedriger Ebene wie load, store und wait/notify, was eine hochperformante, sperrfreie Kommunikation zwischen Threads ermöglicht.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
const buffer = new SharedArrayBuffer(1024);const view = new Int32Array(buffer);// In Worker A:Atomics.store(view, 0, 100);Atomics.notify(view, 0, 1);// In Worker B:Atomics.wait(view, 0, 0); // Wait until index 0 is not 0const val = Atomics.load(view, 0);console.log(`Received: ${val}`);
nodejs
Erklärung
1
Atomics.store(view, 0, 100)
Führt eine atomare Schreiboperation aus und stellt sicher, dass der Wert für alle Threads ohne Cache-Inkonsistenzen sofort sichtbar ist.
2
Atomics.wait(view, 0, 0)
Versetzt den Thread in den Ruhezustand, bis sich ein bestimmter Speicherplatz ändert, sofern der aktuelle Wert dem erwarteten entspricht.