0 Tage Serie
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
javascript
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 0
const 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.