wilk/microjob
A tiny wrapper for turning Node.js worker threads into easy-to-use routines for heavy CPU loads.
repo name | wilk/microjob |
repo link | https://github.com/wilk/microjob |
homepage | https://wilk.github.io/microjob/ |
language | TypeScript |
size (curr.) | 1179 kB |
stars (curr.) | 1820 |
created | 2018-08-26 |
license | MIT License |
Microjob
A tiny wrapper for turning Node.js threads in easy-to-use routines for CPU-bound.
Introduction
Microjob is a tiny wrapper for Node.js threads and is intended to perform heavy CPU loads using anonymous functions.
So, Microjob treats Node.js threads as temporary working units: if you need to spawn a long-living thread, then you should use the default API.
From version v0.1.0 microjob uses a Worker Pool 🎉
Microjob follows the same line of the original Node.js documentation: use it only for CPU-bound jobs and not for I/O-bound purposes. Quoting the documentation:
Workers are useful for performing CPU-intensive JavaScript operations; do not use them for I/O, since Node.js’s built-in mechanisms for performing operations asynchronously already treat it more efficiently than Worker threads can.
Microjob can be used with Node.js 12+ without flag. With Node.js 10.5+ you need the –experimental-worker flag activated, otherwise it won’t work.
More details explained in: Microjob: a tiny multithreading library for Node.js
Installation
Via npm:
$ npm install --save microjob
Quick Example
(async () => {
const { job, start, stop } = require("microjob");
try {
// start the worker pool
await start();
// this function will be executed in another thread
const res = await job(() => {
let i = 0;
for (i = 0; i < 1000000; i++) {
// heavy CPU load ...
}
return i;
});
console.log(res); // 1000000
} catch (err) {
console.error(err);
} finally {
// shutdown worker pool
await stop();
}
})();
Features
- 🛢️ Worker Pool
- 🏥 auto self-healing
- 🙌 easy and simple
- 🕔 supports both sync and async jobs
- 🛡️ huge test coverage
- 📜 well documented
Documentation
Dive deep into the documentation to find more examples: Guide