-
Notifications
You must be signed in to change notification settings - Fork 29.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
timers: refactor timer list processing
Instead of using kOnTimeout index to track a special list processing function, just pass in a function to C++ at startup that executes all handles and determines which function to call. This speeds up unpooled timeouts, as well as cleaning up timers.
- Loading branch information
1 parent
8204b0f
commit 854720a
Showing
5 changed files
with
68 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
'use strict'; | ||
const common = require('../common.js'); | ||
|
||
// The following benchmark sets up n * 1e6 unpooled timeouts, | ||
// then measures their execution on the next uv tick | ||
|
||
const bench = common.createBenchmark(main, { | ||
millions: [1], | ||
}); | ||
|
||
function main({ millions }) { | ||
const iterations = millions * 1e6; | ||
let count = 0; | ||
|
||
// Function tracking on the hidden class in V8 can cause misleading | ||
// results in this benchmark if only a single function is used — | ||
// alternate between two functions for a fairer benchmark | ||
|
||
function cb() { | ||
count++; | ||
if (count === iterations) | ||
bench.end(iterations / 1e6); | ||
} | ||
function cb2() { | ||
count++; | ||
if (count === iterations) | ||
bench.end(iterations / 1e6); | ||
} | ||
|
||
for (var i = 0; i < iterations; i++) { | ||
// unref().ref() will cause each of these timers to | ||
// allocate their own handle | ||
setTimeout(i % 2 ? cb : cb2, 1).unref().ref(); | ||
} | ||
|
||
bench.start(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters