在事件循环中为nodejs任务分配优先级

时间:2014-09-30 07:07:06

标签: javascript node.js event-loop

有没有办法可以在事件循环中对Node.js任务应用优先级。 我想为nodejs的事件循环中存在的任务分配优先级。
假设在事件循环中有5个具有相同优先级的作业A,B,C,D,E,然后接收下一个优先级高于后五个作业的作业。然后事件循环开始执行该更高优先级的作业。

2 个答案:

答案 0 :(得分:3)

中的事件循环不支持优先级。查看一些文档:

如果不重写它,我不会认为你可以做很多事情。

答案 1 :(得分:2)

您应该使用优先级队列,例如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函数提取下一个最高优先级项目并执行它。