threadwork
Simple, no frills, threading in Node.js
Why
Other solutions were too complex. Many threading apps just need a way to create a thread pool and call the threaded function; that's what this does.
How
Most threading solutions stringify the function and arguments before passing them to a worker. Stringifying creates friction when using dependencies. threadwork
skips stringifying the function by using a reference instead, reducing the effort to create a threaded function.
Example
// fibonacci.jsconst ThreadPool = ; { if n < 2 return n; return + ;} moduleexports = task: fibonacci ;
// index.jsconst pool = ; async { try const results = await Promiseall pool pool pool ; console; // [55, 6765, 832040] catch e console; finally await pool; };
API
-
new ThreadPool({ task, size })
- The primary class. It should be instantiated at the top-level and only once per file.task
- The worker runs this functionsize
- The number of workers in the pool (defaults to the number of cores)
-
await pool.run(arg1, arg2, ...)
- Executes the task once with the arguments provided. -
await pool.close()
- Terminates all the workers, allowing the process to exit. -
pool.isMainThread
- Allows logic based on whether we're in a worker or not.
Compatibility
Node.js 12+ for stable worker_threads
ts-node-dev
There's best-effort support for ts-node-dev. You must provide the following:
TS_NODE_DEV_CACHE
as an environment variable- The same directory should be provided to
ts-node-dev
via--cache-directory
CLI example:
TS_NODE_DEV_CACHE=.ts-node tsnd --cache-directory $TS_NODE_DEV_CACHE --respawn index.ts
License
MIT