https://github.com/matrixai/js-workers
Multi-Threaded Workers
https://github.com/matrixai/js-workers
threads webworkers workers
Last synced: 11 months ago
JSON representation
Multi-Threaded Workers
- Host: GitHub
- URL: https://github.com/matrixai/js-workers
- Owner: MatrixAI
- License: apache-2.0
- Created: 2021-09-14T08:56:29.000Z (over 4 years ago)
- Default Branch: staging
- Last Pushed: 2025-03-11T00:58:17.000Z (12 months ago)
- Last Synced: 2025-04-03T10:01:34.473Z (11 months ago)
- Topics: threads, webworkers, workers
- Language: TypeScript
- Homepage: https://polykey.com
- Size: 1.24 MB
- Stars: 2
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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`.
```ts
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
```sh
npm install --save @matrixai/workers
```
## Development
Run `nix develop`, and once you're inside, you can use:
```sh
# install (or reinstall packages from package.json)
npm install
# build the dist
npm run build
# run the repl (this allows you to import from ./src)
npm run tsx
# run the tests
npm run test
# lint the source code
npm run lint
# automatically fix the source
npm run lintfix
```
## Benchmarks
```sh
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
```sh
npm run docs
```
See the docs at: https://matrixai.github.io/js-workers/
### Publishing
Publishing is handled automatically by the staging pipeline.
Prerelease:
```sh
# npm login
npm version prepatch --preid alpha # premajor/preminor/prepatch
git push --follow-tags
```
Release:
```sh
# npm login
npm version patch # major/minor/patch
git push --follow-tags
```
Manually:
```sh
# npm login
npm version patch # major/minor/patch
npm run build
npm publish --access public
git push
git push --tags
```