Skip to content

Instantly share code, notes, and snippets.

@esperia
Created December 11, 2013 15:23
Show Gist options
  • Save esperia/7912291 to your computer and use it in GitHub Desktop.
Save esperia/7912291 to your computer and use it in GitHub Desktop.
var fs = require('fs');
var crypto = require('crypto');
var dirName = './files';
var before = Date.now();
var mkfileNum = 5000;
// mkdir
fs.exists(dirName, function(exists) {
if (!exists) {
fs.mkdir(dirName, function(err) {
if (err) throw err;
console.log('dir created', dirName);
mkfiles(0);
});
} else {
mkfiles(0);
}
});
function mkfiles(n) {
if (n < mkfileNum) {
var s = Date.now() + ':' + n;
var d = crypto.createHash('sha1').update(s).digest('hex');
console.log('now=', n, 'data=', d);
fs.writeFile(dirName + '/' + d + '.log', d, function(err) {
if (err) throw err;
fs.close
mkfiles(n+1);
});
} else {
console.log('complete, ', Date.now() - before);
}
}
var fs = require('fs');
var crypto = require('crypto');
var cp = require('child_process');
var dirName = './files';
var before;
var ulimit = 0;
var mkfileNum = 5000;
// mkdir
fs.exists(dirName, function(exists) {
if (!exists) {
fs.mkdir(dirName, function(err) {
if (err) throw err;
console.log('dir created', dirName);
reqLimit();
});
} else {
reqLimit();
}
});
function reqLimit() {
cp.exec('ulimit -n', function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
} else {
ulimit = parseInt(stdout, 10);
console.log('ulimit=', ulimit);
before = Date.now();
mkfiles(0);
}
});
}
var wrote = 0;
function mkfiles(n) {
if (n < mkfileNum) {
if ((n - wrote) >= ulimit-12) {
// 超えてたら次のtickへ
setImmediate(function() {
mkfiles(n);
});
} else {
var s = Date.now() + ':' + n;
var d = crypto.createHash('sha1').update(s).digest('hex');
console.log('now=', n, 'data=', d);
fs.writeFile(dirName + '/' + d + '.log', d, function(err) {
if (err) throw err;
wrote++;
});
mkfiles(n+1);
}
} else {
console.log('complete, ', Date.now() - before);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment