diff options
-rw-r--r-- | README.md | 24 | ||||
-rw-r--r-- | bench/snippets/spawn-hugemem.mjs | 13 | ||||
-rw-r--r-- | bench/snippets/spawn-hugemem.node.mjs | 13 |
3 files changed, 49 insertions, 1 deletions
@@ -1973,7 +1973,29 @@ The interface for `Bun.serve` is based on what [Cloudflare Workers](https://deve ## `Bun.spawn` – spawn a process -`Bun.spawn` lets you quickly spawn a process. Available as of Bun v0.2.0. +`Bun.spawn` lets you quickly spawn a process. + +Available as of Bun v0.2.0, it tends to perform around 60% faster than child_process and scales better as your application uses more memory. + +```zig +bun/bench/snippets on main +❯ bun spawn.mjs +cpu: Apple M1 Max +runtime: bun 0.2.0 (arm64-darwin) + +benchmark time (avg) (min … max) p75 p99 p995 +--------------------------------------------------------- ----------------------------- +spawnSync echo hi 888.14 µs/iter (821.83 µs … 1.2 ms) 905.92 µs 1 ms 1.03 ms + +bun/bench/snippets on main +❯ node spawn.node.mjs +cpu: Apple M1 Max +runtime: node v18.9.1 (arm64-darwin) + +benchmark time (avg) (min … max) p75 p99 p995 +--------------------------------------------------------- ----------------------------- +spawnSync echo hi 1.47 ms/iter (1.14 ms … 2.64 ms) 1.57 ms 2.37 ms 2.52 ms +``` ```ts import { spawn } from "bun"; diff --git a/bench/snippets/spawn-hugemem.mjs b/bench/snippets/spawn-hugemem.mjs new file mode 100644 index 000000000..d6de9b08c --- /dev/null +++ b/bench/snippets/spawn-hugemem.mjs @@ -0,0 +1,13 @@ +import { spawnSync } from "bun"; +import { bench, run } from "mitata"; + +var memory = new Uint8Array(128 * 1024 * 1024); +memory.fill(10); +// prevent memory from being garbage collected +globalThis.memory = memory; + +bench("spawnSync echo hi", () => { + spawnSync({ cmd: ["echo", "hi"] }); +}); + +await run(); diff --git a/bench/snippets/spawn-hugemem.node.mjs b/bench/snippets/spawn-hugemem.node.mjs new file mode 100644 index 000000000..d2a728e60 --- /dev/null +++ b/bench/snippets/spawn-hugemem.node.mjs @@ -0,0 +1,13 @@ +import { spawnSync } from "child_process"; +import { bench, run } from "mitata"; + +var memory = new Uint8Array(128 * 1024 * 1024); +memory.fill(10); +// prevent memory from being garbage collected +globalThis.memory = memory; + +bench("spawnSync echo hi", () => { + spawnSync("echo", ["hi"], { encoding: "buffer", shell: false }); +}); + +await run(); |