March 22, 2026
Thread wars, assemble
Node.js worker threads are problematic, but they work great for us
“Threads to the rescue?” Devs split between praise, pain, and popcorn
TLDR: Inngest kept critical “I’m alive” signals safe by moving them to a separate thread, fixing dropped work under heavy load. The comments erupted over whether to use threads, separate processes, or Rust addons—and if JS tooling makes workers more pain than payoff—showing how hard performance choices still are.
Node pros at Inngest fixed a gnarly bug by moving their WebSocket “heartbeat” into a separate thread so CPU-hungry code couldn’t freeze it. In plain English: their app’s “I’m alive” check-ins were getting choked by heavy tasks, so they put the life support on a different lane. Tech win… but the comments turned it into a street fight.
One camp cheered the move but screamed “don’t block the main loop!” insisting the main thread should just dispatch jobs and let other processes do the heavy lifting. Another camp said worker threads are cute until you’re copying mountains of data between them—then the gains vanish. Cue the Rust crowd flexing: use a native addon and skip the overhead. Meanwhile, toolchain trauma bubbled up with devs roasting JS bundlers for making workers a deployment headache. And just when the room got quiet, performance testers dropped a bomb: Bun with shared memory keeps up with Go and C#, Node lags, and only C truly crushes.
Between memes about “spawn-a-core cosplay” and links to Node worker threads, the vibe is clear: worker threads work—until they don’t. The fix saved heartbeats, but the community is still split on whether threads, processes, or Rust is the real hero.
Key Points
- •Inngest observed “no available worker” errors caused by missed WebSocket heartbeats in its Connect feature.
- •Root cause was event loop starvation: CPU-bound user code on the main thread blocked timers and network callbacks.
- •Inngest moved Connect’s critical internals into a Node.js worker thread to isolate heartbeats from user workloads.
- •Worker threads provide separate V8 isolates, heaps, and event loops, preventing CPU-bound tasks in one thread from blocking another.
- •This isolation ships automatically in v4 of the Inngest TypeScript SDK; Bun and Deno also support worker threads.