Skip to content

Commit a5d8945

Browse 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

3 files changed

Lines changed: 23 additions & 6 deletions

File tree

‎lib/internal/linkedlist.js‎

Lines 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+
functioncreate(){
11+
varlist={_idleNext: null,_idlePrev: null};
12+
init(list);
13+
returnlist;
14+
}
15+
exports.create=create;
916

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

4350
// remove a item from its list and place at the end.
4451
functionappend(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;

‎lib/timers.js‎

Lines 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-
varimmediateQueue={};
506-
L.init(immediateQueue);
505+
varimmediateQueue=L.create();
507506

508507

509508
functionprocessImmediate(){
510509
varqueue=immediateQueue;
511510
vardomain,immediate;
512511

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

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

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

Lines 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+
varlist2=L.create();
107+
varlist3=L.create();
108+
assert.ok(L.isEmpty(list2));
109+
assert.ok(L.isEmpty(list3));
110+
assert.ok(list2!=list3);

0 commit comments

Comments
 (0)