Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a5d8945

Browse filesBrowse files
AndrasFishrock123
authored andcommitted
timers: optimize linkedlist
Now uses a new L.create() factory to create access-optimized linkedlist objects. PR-URL: #6436 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
1 parent e727cb5 commit a5d8945
Copy full SHA for a5d8945

File tree

Expand file treeCollapse file tree

3 files changed

+23
-6
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+23
-6
lines changed
Open diff view settings
Collapse file

‎lib/internal/linkedlist.js‎

Copy file name to clipboardExpand all lines: lib/internal/linkedlist.js
+16-2Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ function init(list) {
66
}
77
exports.init = init;
88

9+
// create a new linked list
10+
function create() {
11+
var list = { _idleNext: null, _idlePrev: null };
12+
init(list);
13+
return list;
14+
}
15+
exports.create = create;
916

1017
// show the most idle item
1118
function peek(list) {
@@ -42,10 +49,17 @@ exports.remove = remove;
4249

4350
// remove a item from its list and place at the end.
4451
function append(list, item) {
45-
remove(item);
52+
if (item._idleNext || item._idlePrev) {
53+
remove(item);
54+
}
55+
56+
// items are linked with _idleNext -> (older) and _idlePrev -> (newer)
57+
// TODO: swap the linkage to match the intuitive older items at "prev"
4658
item._idleNext = list._idleNext;
47-
list._idleNext._idlePrev = item;
4859
item._idlePrev = list;
60+
61+
// the list _idleNext points to tail (newest) and _idlePrev to head (oldest)
62+
list._idleNext._idlePrev = item;
4963
list._idleNext = item;
5064
}
5165
exports.append = append;
Collapse file

‎lib/timers.js‎

Copy file name to clipboardExpand all lines: lib/timers.js
+2-4Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -502,16 +502,14 @@ Timeout.prototype.close = function() {
502502
};
503503

504504

505-
var immediateQueue = {};
506-
L.init(immediateQueue);
505+
var immediateQueue = L.create();
507506

508507

509508
function processImmediate() {
510509
var queue = immediateQueue;
511510
var domain, immediate;
512511

513-
immediateQueue = {};
514-
L.init(immediateQueue);
512+
immediateQueue = L.create();
515513

516514
while (L.isEmpty(queue) === false) {
517515
immediate = L.shift(queue);
Collapse file

‎test/parallel/test-timers-linked-list.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-timers-linked-list.js
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,8 @@ assert.equal(C, L.shift(list));
103103
// list
104104
assert.ok(L.isEmpty(list));
105105

106+
var list2 = L.create();
107+
var list3 = L.create();
108+
assert.ok(L.isEmpty(list2));
109+
assert.ok(L.isEmpty(list3));
110+
assert.ok(list2 != list3);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.