Skip to content

Instantly share code, notes, and snippets.

@ifsnow
Created November 11, 2016 05:03
Show Gist options
  • Save ifsnow/b23435726b15e92ebeab8a1ad96787c5 to your computer and use it in GitHub Desktop.
Save ifsnow/b23435726b15e92ebeab8a1ad96787c5 to your computer and use it in GitHub Desktop.
var co = require('co');
/**
* Module dependencies.
*
* - async : npm install async
* - commander : npm install commander
*/
var async = require('async');
var program = require('commander');
program
.option('-n, --number <n>', 'Number of executions to perform')
.option('-c, --concurrency <n>', 'Number of executions at a time.')
.parse(process.argv);
var TOTAL_EXECUTIONS = program.number || 200000;
var CONCURRENCY = program.concurrency || 500;
// Creates dummy jobs
var jobs = [];
for (var i=1; i<=TOTAL_EXECUTIONS; i++) {
jobs.push(i);
}
// Creates a dummy blocking function
function blockingProcess() {
return new Promise(function(resolve, reject) {
setTimeout(resolve, 10);
});
}
// Creates a wrapped function
var wrappedFunction = co.wrap(function *(callback) {
yield Promise.resolve(1);
yield Promise.resolve(2);
yield Promise.resolve(3);
yield [Promise.resolve(1), Promise.resolve(2)];
yield {
1 : Promise.resolve(1),
2 : Promise.resolve(2)
};
yield blockingProcess();
callback();
});
// Start benchmark
var memoryAtStart = process.memoryUsage();
var startTime = process.hrtime();
async.eachLimit(jobs, CONCURRENCY, function (job, callback) {
wrappedFunction(callback);
}, function() {
var diff = process.hrtime(startTime);
var memoryAtEnd = process.memoryUsage();
var executionTime = diff[0] + diff[1]/1e9;
console.log('- Execution time : ' + executionTime + ' seconds');
console.log('- Executions per second : ' + parseInt(TOTAL_EXECUTIONS / executionTime, 10));
console.log('- Memory usage : ' + (memoryAtEnd.rss - memoryAtStart.rss) + ' Bytes');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment