js-workers
Workers is the library for multi-threading in MatrixAI's JavaScript/TypeScript applications. It is based on top of threads.js.
Currently no support for Mobile OSes.
Note that only ArrayBuffer
can be zero-copy transferred to the worker threads. This means if you are wroking with Node Buffer
you must first slice and copy the ArrayBuffer
out of the Node Buffer
.
const b = Buffer.from('hello world');
const ab = b.buffer.slice(b.byteOffset, b.byteOffset + b.byteLength);
The following diagram is an example architecture of using ArrayBuffer
:
βββββββββββββββββββββββββ
β Main Thread β
β β
β βββββββββββββ β
β βNode Bufferβ β
β βββββββ¬ββββββ β ββββββββββββββββββββββββββ
β β β β β
β Slice β Copy β β Worker Thread β
β β β β β
β ββββββββββΌβββββββββ β Transfer β ββββββββββββββββββββ β
β βInput ArrayBufferββββΌβββββββββββΌβββΊ β β
β βββββββββββββββββββ β β βββββββββββ¬βββββββββ β
β β β β β
β β β Compute β β
β β β β β
β βββββββββββββββββββ β β βββββββββββΌβββββββββ β
β β ββββΌβββββββββββΌβββ€Output ArrayBufferβ β
β βββββββββββββββββββ β Transfer β ββββββββββββββββββββ β
β β β β
β β β β
βββββββββββββββββββββββββ ββββββββββββββββββββββββββ
See the benchmarks and tests for examples of using this library.
Installation
npm install --save @matrixai/workers
Development
Run nix-shell
, and once you're inside, you can use:
npm install
npm run build
npm run ts-node
npm run test
npm run lint
npm run lintfix
Benchmarks
npm run bench
View benchmarks here: https://github.com/MatrixAI/js-workers/blob/master/benches/results/WorkerManager.chart.html with https://raw.githack.com/
Docs Generation
npm run docs
See the docs at: https://matrixai.github.io/js-workers/
Publishing
npm version patch
npm run build
npm publish --access public
git push
git push --tags