Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNitzan Uziely <linkgoron@gmail.com>2021-03-05 22:25:26 +0300
committerBenjamin Gruenbaum <benjamingr@gmail.com>2021-03-10 19:00:58 +0300
commitb9fd4eb651dd26c3845aa46714593abae185455d (patch)
tree189fb4f624f7fb01a2c74e8102d8d9af7de766d5 /benchmark
parente216d8f4a1277e77903e9c2c716fefa3b196761b (diff)
fs: add promisified readFile benchmark
add a benchmark for fs.promises.readFile PR-URL: https://github.com/nodejs/node/pull/37608 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'benchmark')
-rw-r--r--benchmark/fs/readfile-promises.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/benchmark/fs/readfile-promises.js b/benchmark/fs/readfile-promises.js
new file mode 100644
index 00000000000..28633c3f064
--- /dev/null
+++ b/benchmark/fs/readfile-promises.js
@@ -0,0 +1,63 @@
+// Call fs.promises.readFile over and over again really fast.
+// Then see how many times it got called.
+// Yes, this is a silly benchmark. Most benchmarks are silly.
+'use strict';
+
+const path = require('path');
+const common = require('../common.js');
+const fs = require('fs');
+const assert = require('assert');
+
+const tmpdir = require('../../test/common/tmpdir');
+tmpdir.refresh();
+const filename = path.resolve(tmpdir.path,
+ `.removeme-benchmark-garbage-${process.pid}`);
+
+const bench = common.createBenchmark(main, {
+ duration: [5],
+ len: [1024, 16 * 1024 * 1024],
+ concurrent: [1, 10]
+});
+
+function main({ len, duration, concurrent }) {
+ try { fs.unlinkSync(filename); } catch { }
+ let data = Buffer.alloc(len, 'x');
+ fs.writeFileSync(filename, data);
+ data = null;
+
+ let writes = 0;
+ let benchEnded = false;
+ bench.start();
+ setTimeout(() => {
+ benchEnded = true;
+ bench.end(writes);
+ try { fs.unlinkSync(filename); } catch { }
+ process.exit(0);
+ }, duration * 1000);
+
+ function read() {
+ fs.promises.readFile(filename)
+ .then((res) => afterRead(undefined, res))
+ .catch((err) => afterRead(err));
+ }
+
+ function afterRead(er, data) {
+ if (er) {
+ if (er.code === 'ENOENT') {
+ // Only OK if unlinked by the timer from main.
+ assert.ok(benchEnded);
+ return;
+ }
+ throw er;
+ }
+
+ if (data.length !== len)
+ throw new Error('wrong number of bytes returned');
+
+ writes++;
+ if (!benchEnded)
+ read();
+ }
+
+ while (concurrent--) read();
+}