Build the safeguards
Eight explained steps, tradeoffs, pitfalls and a checkpoint before moving on.
Read the tutorialComparison / Choose a boundary
A goroutine needs an owner and a way to finish. A bounded worker pool limits active work; cancellation must reach both producers and workers; joining them establishes that shutdown has actually completed.
This comparison separates the implementation pattern from the environment used to explore it. A general playground is useful for editing freely; this lab adds a fixed failure, a readable execution trace and a direct path from the result to its source.
| Approach | Useful when | Tradeoff | Connection to this lab |
|---|---|---|---|
| Goroutine per message | Small bounded fan-out where lifetime and resource limits are already controlled. | Unbounded input becomes unbounded concurrency. | The deliberately broken case makes that pressure visible. |
| Bounded worker pool | Control active work and apply queue backpressure. | Queue size, waiting and rejection need an explicit policy. | The safeguarded engine uses this model. |
| Buffered result channel | Decouple a known number of sends from immediate receives. | Capacity is not a cancellation or ownership policy. | Compare it locally with a receiver that returns early. |
| Go browser WebAssembly | Click and run the actual engine without installing Go. | Browser scheduling is not native multicore execution. | The public environment uses this isolated target. |
| Native Go tests and loopback server | Exercise native scheduling, request contexts and race instrumentation. | Requires Go; race instrumentation also needs a supported C toolchain. | The matching source package supplies both. |
| A general Go playground | Explore a compact language example quickly. | A custom trace and failure controls still need to be designed. | Use focused snippets for language questions and this lab for the complete worker lifetime. |
The browser runs the same Go engine compiled to WebAssembly inside a dedicated worker. Goroutines run concurrently, but this browser target is not a multicore throughput benchmark. A harness cleans up the deliberately blocked example after recording it. The native download includes an HTTP adapter and Go tests.
Run the comparisonReferences support the language and runtime concepts. The lesson, scenarios and explanations are original Zyel Lab material.
Keep exploring
Eight explained steps, tradeoffs, pitfalls and a checkpoint before moving on.
Read the tutorialChoose a pattern and an environment for the problem you actually have.
Compare approachesA beginner route, a local setup and an extension challenge.
Open the how-to guide