Zero-copy data-parallel Worker pool for MoonBit on Web, Deno, Node, and Bun
Dependencies
async fn main {
let threads = @mayo.ThreadPool::open(
@kernels.manifest(),
"./worker.js",
capacity=1_000_000,
workers=4,
)
defer threads.close()
let values = threads.shared_i32()
values.fill(2)
let mapped = values.par_chunks(@kernels.scale(factor=3)) // auto grain
let sum = values.par_reduce(
@kernels.sum(),
init=0,
combine=fn(left, right) { left + right },
)
println("dispatch \{mapped.elapsed_ms} ms; sum \{sum.value}")
}fn main {
@mayo.serve_kernels(@kernels.manifest(), [
@kernels.scale_entry(scale_range),
@kernels.sum_entry(sum_range),
])
}| Runtime | Status | Local requirement |
|---|---|---|
| Deno | Supported | --allow-read for Worker/Wasm files |
| Web | Supported | COOP/COEP cross-origin isolation |
| Node.js 24+ | Supported | built-in worker_threads adapter |
| Bun | Supported | Web Worker adapter, including shared Wasm |
just example-image # shared 640x360 grayscale + Sobel pipeline
just example-scope # structured concurrency
just example-wasm # MoonBit/JS Host + shared MoonBit/Wasm kernel
just serve-web # cross-origin-isolated browser example
just compare 4 # pthread, mmap process, Rust, Rayon, Mayo
just break-even 4 # workload break-even matrix
just performance-regression # portable CI performance budget
just release-checkZero-copy data-parallel Worker pool for MoonBit on Web, Deno, Node, and Bun
Dependencies