在事件循环中为nodejs任务分配优先级
有什么办法可以在事件循环中对Node.js任务应用优先级。 我想为nodejs的事件循环中存在的任务分配优先级。
假设在事件循环中有5个作业A,B,C,D,E具有相同的优先级,然后接收下一个作业,其优先级高于后五个作业。 然后事件循环开始执行该更高优先级的作业。
node.js中的事件循环不支持优先级。 查看一些文档:
没有重写它,我认为你可以做的事情不多。
您应该使用优先级队列,如priorityqueuejs
通过这种方式,您可以使最高优先级的项目出列并执行它。
一些代码:
'use strict';
var PriorityQueue = require('priorityqueuejs');
var queue = new PriorityQueue(function(a, b) {
return a.value - b.value;
});
queue.enq({ value: 10, func: function() { console.log("PRIORITY: 10"); } });
queue.enq({ value: 500, func: function() { console.log("PRIORITY: 500"); } });
queue.enq({ value: 300, func: function() { console.log("PRIORITY: 300"); } });
queue.enq({ value: 100, func: function() { console.log("PRIORITY: 100"); } });
(function executeNext() {
if(queue.size()) {
var next = queue.deq();
next.func();
if(queue.size()) {
setTimeout(executeNext, 0);
}
}
})();
输出是:
PRIORITY: 500
PRIORITY: 300
PRIORITY: 100
PRIORITY: 10
这是executeNext
函数提取下一个最高优先级的项目并执行它。