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
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.