Skip to content

async_hooks: use typed array stack as fast path

  • 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
Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • commit message follows commit guidelines
Affected core subsystem(s)

async_hooks

Merge request reports

Loading