Skip to content

Multi-threading

WebAssembly supports true parallel execution through SharedArrayBuffer and atomic operations. This enables real parallel execution.

SharedArrayBuffer

SharedArrayBuffer allows memory sharing between threads:

javascript
// Create shared memory
const sharedMemory = new SharedArrayBuffer(65536); // 64KB

// Create views
const sharedView = new Int32Array(sharedMemory);

// Worker 1
const worker1 = new Worker('worker1.js');
worker1.postMessage({ sharedBuffer: sharedMemory });

// Worker 2
const worker2 = new Worker('worker2.js');
worker2.postMessage({ sharedBuffer: sharedMemory });

Atomic Operations

Atomic read-modify-write

rust
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn atomic_increment(memory: &mut [i32], index: usize) -> i32 {
    let old = memory[index];
    memory[index] = old + 1;
    old + 1
}

JavaScript Atomic Operations

javascript
const sharedArray = new Int32Array(new SharedArrayBuffer(1024));

// Atomic operations
Atomics.add(sharedArray, 0, 10);      // Add 10
Atomics.sub(sharedArray, 0, 5);       // Subtract 5
Atomics.and(sharedArray, 0, 0b1111);  // Bitwise AND
Atomics.or(sharedArray, 0, 0b1111);   // Bitwise OR
Atomics.xor(sharedArray, 0, 0b1111);  // Bitwise XOR

// Compare exchange
const old = Atomics.compareExchange(sharedArray, 0, 5, 10);

// Load and store
const value = Atomics.load(sharedArray, 0);
Atomics.store(sharedArray, 0, value + 1);

// Wait and notify
Atomics.wait(sharedArray, 0, expectedValue, timeout);
Atomics.notify(sharedArray, 0, count);

Browser Requirements

FeatureChromeFirefoxSafariEdge
SharedArrayBuffer92+79+15.2+92+
Atomics92+79+15.2+92+
WorkerAllAllAllAll

Cross-Origin Isolation

SharedArrayBuffer requires cross-origin isolation. Set these response headers:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

Performance Considerations

AspectRecommendation
GranularityUse fine-grained atomic operations
ContentionMinimize lock hold time
False sharingPad data to different cache lines
MemoryUse shared memory sparingly

Continue learning Garbage Collection.

Released under the MIT License.