paratask

Paratask is a tool that will execute your Back-end JavaScript code in parallel using the full potential of multi-process programming. In contrast to asynchronous task management, Paratask will create a child Node/io.js process.

Paratask - Node/io.js Parallel Process Manager

Paratask is a tool that will execute your code in parallel using the full potential of multi-process programming. In contrast to asynchronous task management, Paratask will create a child Node/io.js process in which your task function will 'live'.

Note: Scope dependency injection is at your service. More into in the examples below.

Note: This modules uses ES5 "callback" style. If you're more into the Promises/A+ standard you can use paratask-promises

You can install Paratask with the Node Package Manager:

npm install paratask

or by getting it from this repo.

Paratask uses only native Node/io.js modules that do not need additional installation: fs and child_process.

Both task_1 and task_2 will fork a new Node/io.js process and will run concurrently. When both call callback(), the final results will be printed in the console.

Note: scope property is your dependency injector. Can only be a valid JSON.parse() value (i.e. no functions allowed).

var paratask = require('paratask');
 
var task_1 = {
  forkfunction (callback) {
    // Some calculation using the 'count' scope var 
    var result = count * 10;
    callback(null, result);
  },
  scope: {
    count: 10
  }
};
 
var task_2 = {
  forkfunction (callback) {
    // Some calculation using the 'count' scope var 
    var result = count * 10;
    callback(null, result);
  },
  scope: {
    count: 20
  }
};
 
paratask([ task_1, task_2 ], function (errorresults) {
  console.log( error   );  // null 
  console.log( results );  // [100, 200], 1st task result will be always the 1st in the results array even if completed last 
});

Both task_1 and task_2 will fork a new process but when task_2 call callback('Error message') both processes will be killed and the final callback will be executed.

Note: scope property is optional.

var paratask = require('paratask');
 
var task_1 = {
  forkfunction (callback) {
    var count     = 1000000000;
    var factorial = 1;
 
    while (--count) factorial *= count;
 
    callback(null, factorial);
  }
};
 
var task_2 = {
  forkfunction (callback) {
    callback('Error message');
  }
};
 
paratask([ task_1, task_2 ], function (errorresults) {
  console.log( error   );  // 'Error message' 
  console.log( results );  // [], the results array may not have any data saved since one task error will kill all forked tasks 
});

A palette of comparison tests between paratask(), async.parallel(), and process.nextTick() are available in ./tests folder.

node tests/async_heavy_test.js
node tests/process_nextTick_heavy_test.js
node tests/paratask_heavy_test.js

Paratask is great when you have several time consuming task functions with few external dependencies. In such cases, multi-processing is the best approach. When you want to manage several relevantly quick functions with asynchronous logic, async will handle it with beauty.