0Pricing
WebAssembly (WASM) for High Performance Apps · Lekcja

Przekazywanie komunikatów i kanały między wątkami WASM

Koordynuj równoległe workery WASM za pomocą wzorców przekazywania komunikatów i abstrakcji kanałów zamiast bezpośredniej pamięci współdzielonej.

Przekazywanie komunikatów i kanały między wątkami WASM to bezpłatna lekcja WebAssembly (WASM) for High Performance Apps na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej WebAssembly (WASM) for High Performance Apps, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs WebAssembly (WASM) for High Performance Apps zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Two Models of Concurrency

Concurrent systems coordinate either by sharing memory (SharedArrayBuffer + atomics) or by passing messages. Message passing avoids many data races by design.

postMessage Basics

Web Workers communicate with postMessage. Data is structured-cloned, so each side gets its own copy.

const worker = new Worker("worker.js");
worker.postMessage({ cmd: "start", n: 1000 });
worker.onmessage = (e) => console.log("result", e.data);

Transferable Objects

To avoid copying large buffers, transfer ownership instead of cloning.

const buf = new ArrayBuffer(1024 * 1024);
worker.postMessage({ buf }, [buf]);
// buf is now neutered in the sender

Designing a Channel

A channel is a typed queue abstraction layered over postMessage: a send side and a receive side with backpressure and request IDs.

Request/Response Correlation

Attach a unique id to each message so async replies can be matched to their originating request via a pending-promise map.

const pending = new Map();
let nextId = 1;
function call(payload) {
  const id = nextId++;
  return new Promise((res) => {
    pending.set(id, res);
    worker.postMessage({ id, payload });
  });
}

Fan-Out Work Pools

For data parallelism, spawn N workers and round-robin tasks to them. Collect results as they arrive, preserving order with the request IDs.

Combining with Shared Memory

Message passing for control, SharedArrayBuffer for bulk data is a powerful hybrid: send a small message saying which slice to process, while the data lives in shared memory.

Avoiding Deadlocks

Pure message-passing systems still deadlock if two parties each wait for the other. Keep protocols acyclic and prefer non-blocking sends.

Serialization Cost

Structured clone is convenient but costly for big graphs. Prefer transferables or shared memory when payloads grow large.

Worker Lifecycle

Create workers up front in a pool and reuse them; spinning up a worker per task wastes time loading and instantiating the WASM module each time.

A Channel-Based Pipeline

Chain stages: source worker emits chunks, a transform worker processes them, a sink worker aggregates — each connected by a channel for a clean streaming pipeline.

Quick Check

How do you send a large ArrayBuffer to a worker without copying it?

Recap

You explored message passing with postMessage, transferables to avoid copies, and channel abstractions with request IDs and worker pools. Hybrid designs pair messages for control with shared memory for bulk data.

Często zadawane pytania

Czy lekcja „Przekazywanie komunikatów i kanały między wątkami WASM” jest bezpłatna?

Tak — pełny tekst „Przekazywanie komunikatów i kanały między wątkami WASM” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu WebAssembly (WASM) for High Performance Apps, przejdź na CoddyKit PRO. Kurs WebAssembly (WASM) for High Performance Apps zawiera 4 lekcji w sumie.

Co nauczysz się w „Przekazywanie komunikatów i kanały między wątkami WASM”?

Koordynuj równoległe workery WASM za pomocą wzorców przekazywania komunikatów i abstrakcji kanałów zamiast bezpośredniej pamięci współdzielonej. Ćwiczysz WebAssembly (WASM) for High Performance Apps z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć WebAssembly (WASM) for High Performance Apps?

Nie wymagamy żadnego doświadczenia. WebAssembly (WASM) for High Performance Apps w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Przekazywanie komunikatów i kanały między wątkami WASM”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji WebAssembly (WASM) for High Performance Apps?

Tak. Każda lekcja WebAssembly (WASM) for High Performance Apps zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Web Workers z wątkami WASM
  2. SharedArrayBuffer i operacje atomowe dla WASM
  3. Projektowanie współbieżnych aplikacji WASM
  4. Przekazywanie komunikatów i kanały między wątkami WASM
← Powrót do WebAssembly (WASM) for High Performance Apps