javascript / expert
Snippet
Zero-Copy-Zustandssynchronisierung in Svelte über Atomics-Mutexes mit SharedArrayBuffer
Beim Austausch hochfrequenter Zustandsdaten zwischen Web Workern und Svelte-Stores erzeugt die Serialisierung von Payloads Speicher-Overhead. SharedArrayBuffer in Kombination mit Atomics ermöglicht blockierungsfreie Thread-Lock-Primitiven.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
export function acquireLock(typedArray, index = 0) {while (Atomics.compareExchange(typedArray, index, 0, 1) !== 0) {Atomics.wait(typedArray, index, 1, 100);}}export function releaseLock(typedArray, index = 0) {Atomics.store(typedArray, index, 0);Atomics.notify(typedArray, index, 1);}
svelte
Erklärung
1
export function acquireLock(typedArray, index = 0) {
Definiert einen Thread-Sperrmechanismus über eine Int32Array-Ansicht auf einen SharedArrayBuffer.
2
while (Atomics.compareExchange(typedArray, index, 0, 1) !== 0) {
Prüft atomar, ob der Lock 0 ist, setzt ihn auf 1 und verbleibt in der Schleife, bis die Übernahme gelingt.
3
Atomics.wait(typedArray, index, 1, 100);
Versetzt den ausführenden Agenten für bis zu 100 ms in den Ruhezustand, während er auf das Freigabe-Signal wartet.
4
Atomics.store(typedArray, index, 0);
Aktualisiert die Mutex-Adresse atomar zurück auf 0, um den kritischen Abschnitt freizugeben.
5
Atomics.notify(typedArray, index, 1);
Weckt einen wartenden Worker-Thread auf, der an dem angegebenen Array-Index blockiert ist.