javascript / expert
Snippet
Sperrfreie Parallelität mit Atomics und SharedArrayBuffer
SharedArrayBuffer ermöglicht es mehreren Threads (Web Workern), denselben Speicherbereich zu teilen. Atomics bietet statische Methoden für thread-sichere Operationen auf TypedArrays, um Race Conditions ohne den Overhead herkömmlicher Mutexe zu verhindern.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
const buffer = new SharedArrayBuffer(1024);const uint8 = new Uint8Array(buffer);// In a Worker thread or main threadfunction safeIncrement(index) {return Atomics.add(uint8, index, 1);}// Waiting for a value change without blocking the event loopfunction waitForSignal(index, expectedValue) {const result = Atomics.wait(new Int32Array(buffer), index, expectedValue, 1000);return result === 'ok' || result === 'not-equal';}
nextjs
Erklärung
1
const buffer = new SharedArrayBuffer(1024);
Allokiert einen binären Rohdatenpuffer fester Länge, der zwischen Workern geteilt werden kann.
2
Atomics.add(uint8, index, 1);
Addiert atomar einen Wert an einem Index und stellt sicher, dass kein anderer Thread die Operation unterbricht.
3
Atomics.wait(...);
Wartet synchron auf die Änderung einer Speicherstelle; wird zur UI-Stabilität nur in Nicht-Main-Threads unterstützt.