concurrent tasks for Nashorn
inspired by NSOperationQueue
Prerequisites
- Java 8;
- maven 3.x.x;
- node.js 0.10.x (optional);
- npm (optional);
Build
mvn package
ornpm run build
.
Run example
npm run example
or./runtime example.js
Run tests
npm test
or./runtime test/test.js
API
Require:
var tasks = require('tasks');
Create queue:
var queue = tasks.createQueue({ concurrency : 2 });
or use tasks
as default queue.
Create a task:
var task = queue.createTask(function (numbers) {
return numbers.reduce(function (p, q) {
return p + q;
}, 0);
}, [1, 2, 3]);
Caveats:
- task can't reference anything from outer scope;
- input and output are serialized via
JSON.stringify
; require
doesn't work;
Set up dependencies:
var first = queue.createTask(function (numbers) {
return numbers.map(function (n) {
return n + 1;
});
}, [1, 2, 3]);
var second = queue.createTask(function (numbers) {
return numbers.reduce(function (p, q) {
return p + q;
}, 0);
});
second.addDependency(first);
first
gets input (second argument of createTasks
) as an argument.
second
has no input
specified, so it gets output of it's dependencies.
Run queue:
queue.run();
This method blocks until queue is empty.
Check results:
console.log(first.result);
console.log(second.result);
License
MIT