Zurück zur Übersicht

Begriff

Threads in Wasm

WebAssembly Concurrency S4
2 Quellen 0 Lernpfade 1 Backlink enriched

Warum wichtig?

Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.

JavaScript ist Single-Threaded. (Es gibt Web Workers, aber die können keinen Speicher teilen - sie müssen Daten kopieren/klonen). Echte Native Apps (C++/Rust) nutzen Shared Memory Threads. Threads in Wasm erlaubt genau das im Browser. Du startest mehrere Web Workers. Aber alle Workers greifen auf denselben SharedArrayBuffer (den Wasm Memory) zu. Sie nutzen Atomics (native CPU-Instruktionen), um sich zu synchronisieren, ohne Daten zu kopieren. Das erlaubt es, Photoshop oder High-End Games fast 1:1 in den Browser zu portieren.

Merksatz: Eine WebAssembly-Funktionalität, die echten Multithreading-Support durch gemeinsam genutzten Speicher (SharedArrayBuffer) und atomare Operationen ermöglicht, ähnlich wie bei nativen Desktop-Anwendungen.


Quick-Check

  1. Warum Spectre-Header?
    Mit einem exakten Shared Timer (den man mit Threads bauen kann) könnte man Cross-Origin Daten aus dem Speicher lesen (Side Channel). Die Header isolieren die Webseite in einen eigenen Prozess, damit sie niemanden ausspionieren kann.
  2. Blockiert der Main Thread?
    Wasm verbietet atomic.wait im Main Thread (UI Thread). Sonst würde der Browser einfrieren. Threads müssen im Worker laufen.
  3. Garbage Collection und Threads?
    Noch schwierig. WasmGC Objekte zwischen Threads zu teilen ist komplizierter als lineares Memory. Daran wird gearbeitet ("Shared-Everything").