threadwork
TypeScript icon, indicating that this package has built-in type declarations

0.6.0 • Public • Published

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.js
const { ThreadPool } = require('threadwork');
 
function fibonacci(n) {
    if (< 2) return n;
    return fibonacci(- 1) + fibonacci(- 2);
}
 
module.exports = new ThreadPool({ task: fibonacci });
// index.js
const pool = require('./fibonacci');
 
(async () => {
    try {
        const results = await Promise.all([
            pool.run(10),
            pool.run(20),
            pool.run(30)
        ]);
        console.log(results); // [55, 6765, 832040]
    } catch (e) {
        console.log(e);
    } finally {
        await pool.close();
    }
})();

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 function
    • size - 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:

  1. TS_NODE_DEV_CACHE as an environment variable
  2. 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

See also

Package Sidebar

Install

npm i threadwork

Weekly Downloads

8

Version

0.6.0

License

MIT

Unpacked Size

13.9 kB

Total Files

9

Last publish

Collaborators

  • kevlened