0 Tage Serie
javascript / expert
Snippet

Atomic Wait-Notify für Latenzarme Thread-Synchronisation

Atomics.wait() und Atomics.notify() ermöglichen eine effiziente Low-Level-Synchronisation zwischen Worker-Threads, die sich Speicher teilen. Im Gegensatz zu postMessage bietet dieser Mechanismus eine Möglichkeit, einen Thread zu pausieren, bis eine Bedingung im SharedArrayBuffer erfüllt ist, was CPU-Zyklen spart.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const { Worker, isMainThread, workerData } = require('worker_threads');
if (isMainThread) {
const sab = new SharedArrayBuffer(4);
const int32 = new Int32Array(sab);
new Worker(__filename, { workerData: sab });
console.log('Main: Waiting...');
Atomics.wait(int32, 0, 0);
console.log('Main: Notified!');
} else {
const int32 = new Int32Array(workerData);
setTimeout(() => {
Atomics.store(int32, 0, 1);
Atomics.notify(int32, 0, 1);
}, 1000);
}
nodejs
Erklärung
1
Atomics.wait(int32, 0, 0);
Versetzt den Thread in den Ruhezustand, wenn der Wert an Index 0 aktuell 0 ist.
2
Atomics.notify(int32, 0, 1);
Weckt einen Thread auf, der am Index 0 des gemeinsamen Speichers wartet.