mirror of
https://github.com/nodejs/node.git
synced 2025-05-10 17:57:53 +00:00

- Communicate the current async stack length through a typed array field rather than a native binding method - Add a new fixed-size `async_ids_fast_stack` typed array that contains the async ID stack up to a fixed limit. This increases performance noticeably, since most of the time the async ID stack will not be more than a handful of levels deep. - Make the JS `pushAsyncIds()` and `popAsyncIds()` functions do the same thing as the native ones if the fast path is applicable. Benchmarks: $ ./node benchmark/compare.js --new ./node --old ./node-master --runs 10 --filter next-tick process | Rscript benchmark/compare.R [00:03:25|% 100| 6/6 files | 20/20 runs | 1/1 configs]: Done improvement confidence p.value process/next-tick-breadth-args.js millions=4 19.72 % *** 3.013913e-06 process/next-tick-breadth.js millions=4 27.33 % *** 5.847983e-11 process/next-tick-depth-args.js millions=12 40.08 % *** 1.237127e-13 process/next-tick-depth.js millions=12 77.27 % *** 1.413290e-11 process/next-tick-exec-args.js millions=5 13.58 % *** 1.245180e-07 process/next-tick-exec.js millions=5 16.80 % *** 2.961386e-07 PR-URL: https://github.com/nodejs/node/pull/17780 Reviewed-By: James M Snell <jasnell@gmail.com>
21 lines
625 B
JavaScript
21 lines
625 B
JavaScript
'use strict';
|
|
require('../common');
|
|
const assert = require('assert');
|
|
const async_hooks = require('async_hooks');
|
|
|
|
// This test verifies that the async ID stack can grow indefinitely.
|
|
|
|
function recurse(n) {
|
|
const a = new async_hooks.AsyncResource('foobar');
|
|
a.emitBefore();
|
|
assert.strictEqual(a.asyncId(), async_hooks.executionAsyncId());
|
|
assert.strictEqual(a.triggerAsyncId(), async_hooks.triggerAsyncId());
|
|
if (n >= 0)
|
|
recurse(n - 1);
|
|
assert.strictEqual(a.asyncId(), async_hooks.executionAsyncId());
|
|
assert.strictEqual(a.triggerAsyncId(), async_hooks.triggerAsyncId());
|
|
a.emitAfter();
|
|
}
|
|
|
|
recurse(1000);
|