Deprecation notice: This package is near its end of life. Switch to threads.js instead. It provides the same features plus additional ones and is generally more awesome :) PS: If you feel different about it, feel free to open an issue.
threadpool.js is aimed to be a general-purpose multi-threading library for Javascript. Its key features are portability and ease of use. The library can either be used in a stand-alone fashion or as a require.js module.
You can add threadpool-js to your project using npm or bower:
npm install --save threadpool-js
# or
bower install --save threadpool-js
Or just by adding this script tag:
<script type="text/javascript" src="http://andywer.github.io/threadpool-js/dist/threadpool.min.js"></script>
Include the library at first. Just add the threadpool.js file to your project and include it per <script>
tag.
Alternatively you may use require.js or require it as a node.js module when using browserify or webpack.
// Init new threadpool with default size
var pool = new ThreadPool();
// Spawn two threads
pool
.run(mythread, "Hello")
.done(function(result) {
document.write("Thread #1: " + result);
});
pool
.run(mythread, " World")
.done(function(result) {
document.write("Thread #2: " + result);
});
// Hint: Keep in mind that you are free to use the done() and error() handlers
// on single jobs and the whole pool!
pool.allDone(function() {
document.write("All jobs are done.");
});
// Thread logic
function mythread (param, done) {
done( param.toUpperCase() );
}
You can also choose to run another javascript file instead of passing a function:
// Init new threadpool with default size
var pool = new ThreadPool();
// Spawn thread running another script file
pool
.run("/path/to/script.js", { foo: 'bar' })
.done(function(result) {
console.log("Job finished and returned: ", result);
});
Assume that you want to use jQuery in your thread code. You cannot manipulate the DOM from there, but you might need some convenience methods. You can import other Javascript files into the scope of your thread code like this:
pool.run(["/path/to/jQuery.min.js"], function(param, done) { /* do something awesome */ });
If you want to pass large blobs to your workers efficiently, you may use a feature called transferable objects.
threadpool-js supports them. Just pass the array of buffers to transfer (after the worker parameter) to the pool's run
method:
pool.run(mythread, {hash: "sha512", data: myUint8Array}, [myUint8Array.buffer]);
Try the samples.
(Use Chrome, Firefox, IE, or Opera)
Note: IE support experimental
This library is published under the MIT license. See LICENSE for details.