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

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


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

  • http://nodejs.org/api/events.html
  • http://strongloop.com/strongblog/node-js-event-loop/
  • 没有重写它,我认为你可以做的事情不多。


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

    链接地址: http://www.djcxy.com/p/22939.html

    上一篇: Assign priority to nodejs tasks in a event loop

    下一篇: GLSL Vertex shader bilinear sampling heightmap