node/benchmark/async_hooks/async-local-storage-getstore-nested-resources.js
Lei Shi bf4a63e8c8
benchmark: update iterations of benchmark/async_hooks/async-local-
storage-getstore-nested-resources.js

Fixes: https://github.com/nodejs/node/issues/50571
PR-URL: https://github.com/nodejs/node/pull/51420
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
2024-03-04 10:05:37 +00:00

47 lines
1.1 KiB
JavaScript

'use strict';
const common = require('../common.js');
const { AsyncLocalStorage, AsyncResource } = require('async_hooks');
/**
* This benchmark verifies the performance of
* `AsyncLocalStorage.getStore()` on propagation through async
* resource scopes.
*
* - AsyncLocalStorage.run()
* - AsyncResource.runInAsyncScope
* - AsyncResource.runInAsyncScope
* ...
* - AsyncResource.runInAsyncScope
* - AsyncLocalStorage.getStore()
*/
const bench = common.createBenchmark(main, {
resourceCount: [10, 100, 1000],
n: [5e5],
});
function runBenchmark(store, n) {
for (let i = 0; i < n; i++) {
store.getStore();
}
}
function runInAsyncScopes(resourceCount, cb, i = 0) {
if (i === resourceCount) {
cb();
} else {
const resource = new AsyncResource('noop');
resource.runInAsyncScope(() => {
runInAsyncScopes(resourceCount, cb, i + 1);
});
}
}
function main({ n, resourceCount }) {
const store = new AsyncLocalStorage();
runInAsyncScopes(resourceCount, () => {
bench.start();
runBenchmark(store, n);
bench.end(n);
});
}