Awesome
fanout-task
<!-- [![build status][build-png]][build] [![Coverage Status][cover-png]][cover] [![Davis Dependency status][dep-png]][dep] --> <!-- [![NPM][npm-png]][npm] -->Efficient zero-alloc parallel fanout
Example
var FanoutTask = require('fanout-task/ordered');
function Logger() {
}
Logger.prototype.log = function log(record, cb) {
console.log(record);
cb(null);
};
Logger.prototype.logMany = function logMany(records, cb) {
var task = FanoutTask.alloc(this, logEachRecord, onLogsDone);
task.run(records, cb);
}
function logEachRecord(task, record, _, cb) {
task.self.log(record, cb);
}
function onLogsDone(task, results, cb) {
FanoutTask.release(task);
for (var i = 0; i < results; i++) {
if (results[i].err) {
return cb(results[i].err);
}
}
cb(null);
}
Benchmarks
raynos at raynos-SVS15127PXB ~/projects/fanout-task on implementation*
$ node benchmark/next-tick-fan-out.js --runs 100000
runParallel { mean: 29.34235,
stdDev: 147.61414459953534,
median: 23,
mode: [ 21 ],
variance: 21789.935685834378,
quartiles:
{ q1: 21,
q2: 23,
q3: 30,
iqr: 9,
lowerFence: 7.5,
upperFence: 43.5,
insiders: null,
outsiders: null } }
async { mean: 21.70497,
stdDev: 132.7226224885066,
median: 16,
mode: [ 16 ],
variance: 17615.294520244333,
quartiles:
{ q1: 16,
q2: 16,
q3: 18,
iqr: 2,
lowerFence: 13,
upperFence: 21,
insiders: null,
outsiders: null } }
collectParallel { mean: 16.92722,
stdDev: 129.76586652465463,
median: 14,
mode: [ 10 ],
variance: 16839.18011487274,
quartiles:
{ q1: 10,
q2: 14,
q3: 15,
iqr: 5,
lowerFence: 2.5,
upperFence: 22.5,
insiders: null,
outsiders: null } }
fastparallel { mean: 18.16369,
stdDev: 102.19139487452472,
median: 14,
mode: [ 12 ],
variance: 10443.08118639576,
quartiles:
{ q1: 12,
q2: 14,
q3: 17,
iqr: 5,
lowerFence: 4.5,
upperFence: 24.5,
insiders: null,
outsiders: null } }
fanout-request { mean: 15.92218,
stdDev: 106.80096389316685,
median: 14,
mode: [ 14 ],
variance: 11406.445888506543,
quartiles:
{ q1: 10,
q2: 14,
q3: 14,
iqr: 4,
lowerFence: 4,
upperFence: 20,
insiders: null,
outsiders: null } }
raynos at raynos-SVS15127PXB ~/projects/fanout-task on implementation*
$ node benchmark/set-immediate-fan-out.js --runs 100000
runParallel { mean: 35.59819,
stdDev: 162.33492139711345,
median: 28,
mode: [ 28 ],
variance: 26352.62670499099,
quartiles:
{ q1: 27,
q2: 28,
q3: 30,
iqr: 3,
lowerFence: 22.5,
upperFence: 34.5,
insiders: null,
outsiders: null } }
async { mean: 21.08103,
stdDev: 108.71812075469205,
median: 16,
mode: [ 15 ],
variance: 11819.629780436939,
quartiles:
{ q1: 15,
q2: 16,
q3: 18,
iqr: 3,
lowerFence: 10.5,
upperFence: 22.5,
insiders: null,
outsiders: null } }
collectParallel { mean: 18.45391,
stdDev: 102.97698819784316,
median: 15,
mode: [ 14 ],
variance: 10604.260098312887,
quartiles:
{ q1: 14,
q2: 15,
q3: 15,
iqr: 1,
lowerFence: 12.5,
upperFence: 16.5,
insiders: null,
outsiders: null } }
fastparallel { mean: 19.60615,
stdDev: 90.33791840407677,
median: 16,
mode: [ 16 ],
variance: 8160.93950157252,
quartiles:
{ q1: 16,
q2: 16,
q3: 17,
iqr: 1,
lowerFence: 14.5,
upperFence: 18.5,
insiders: null,
outsiders: null } }
fanout-request { mean: 17.522,
stdDev: 90.61155114294955,
median: 14,
mode: [ 14 ],
variance: 8210.45320053201,
quartiles:
{ q1: 14,
q2: 14,
q3: 15,
iqr: 1,
lowerFence: 12.5,
upperFence: 16.5,
insiders: null,
outsiders: null } }
Installation
npm install fanout-task
Tests
npm test
Contributors
- Raynos