0 Tage Serie
javascript / expert
Snippet

Thread-sichere Nebenläufigkeit mit Atomics

Atomics bieten Low-Level-Synchronisationsprimitive für SharedArrayBuffer. Im Gegensatz zur Standard-Arithmetik stellen Atomics sicher, dass Operationen ohne Unterbrechung durch andere Threads abgeschlossen werden, was Datenkorruption in mehrthreadigen Node.js-Anwendungen verhindert.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const buffer = new SharedArrayBuffer(1024);
const view = new Int32Array(buffer);
// In a worker or main thread:
function incrementCounter(index) {
// Atomic addition ensures no race conditions across threads
return Atomics.add(view, index, 1);
}
function waitForUpdate(index, expectedValue) {
// Suspends execution until the value at index changes
Atomics.wait(view, index, expectedValue);
console.log('Value updated!');
}
nodejs
Erklärung
1
new SharedArrayBuffer(1024)
Erstellt ein Speichersegment, das zwischen dem Hauptthread und Workern geteilt werden kann.
2
Atomics.add(view, index, 1)
Führt eine Thread-sichere Addition durch und gibt den alten Wert vor der Inkrementierung zurück.
3
Atomics.wait(view, index, expectedValue)
Versetzt einen Thread effizient in den Ruhezustand, bis er benachrichtigt wird oder sich der Wert vom erwarteten ändert.