worker-task-queue
v0.2.1
Published
Streamlined processing of tasks in a shared threadpool.
Downloads
7
Maintainers
Readme
worker-task-queue
This is a standalone implementation of the cooperative multithreading model from Task Worklet as a zero-dependency library for Web and Node.
main thread code:
import WorkerTaskQueue from 'worker-task-queue';
// Set up the worker pool
const queue = new WorkerTaskQueue({
// URL/path for our worker script:
workerUrl: '/path/to/worker.js',
// max pool size:
size: 4
});
function demo(image) {
// allocates a thread in the pool doesn't have one free:
const cropped = postTask('crop', image, { box: [10, 20, 30, 40] });
// subsequent tasks run on the same thread to eliminate data transfer:
let large = postTask('resize', cropped, { width: 1000, height: 1000 });
large = postTask('compress', large, quality);
// ... except when they get automatically parallelized by moving the input to a second thread:
let thumb = postTask('resize', cropped, { width: 200, height: 200 });
thumb = postTask('compress', thumb, quality);
// At this point we've only transferred one image to a background thread,
// and transferred another image between two threads.
// Only the final results are transferred back here, and only when we ask for them:
showPreview(await large.result, await thumb.result);
}
demo();
worker code:
import { registerTask } from 'worker-task-queue/processor';
registerTask('crop', class {
process(image, { box }) {
// complicated stuff in here
return image;
}
});
registerTask('resize', class {
process(image, { width, height }) {
// complicated stuff in here
return image;
}
});
registerTask('compress', class {
process(image, quality) {
// complicated stuff in here
return image;
}
});