Javascript Node.js事件队列优先级

Javascript Node.js事件队列优先级,javascript,node.js,priority-queue,eventqueue,Javascript,Node.js,Priority Queue,Eventqueue,我正在编写一个Node.js应用程序,它根据用户在网站上的活动/位置,对不同的IO进程进行优先级排序。到目前为止,一切都在运行—重要的队列项目首先运行,而不重要的项目则稍后运行 棘手的部分是一次会发生很多事情——用户登录、用户转到不同的页面、用户做一些需要立即处理的事情等等。在大多数情况下,我并不担心Node.js如何管理事件队列,但在某些情况下,我会担心。我在想象一种情况,我的事件队列中有一大堆东西,可能是因为一堆IO批刚刚返回,正在等待处理,用户在我的站点上执行一个操作,需要立即发送IO请求

我正在编写一个Node.js应用程序,它根据用户在网站上的活动/位置,对不同的IO进程进行优先级排序。到目前为止,一切都在运行—重要的队列项目首先运行,而不重要的项目则稍后运行

棘手的部分是一次会发生很多事情——用户登录、用户转到不同的页面、用户做一些需要立即处理的事情等等。在大多数情况下,我并不担心Node.js如何管理事件队列,但在某些情况下,我会担心。我在想象一种情况,我的事件队列中有一大堆东西,可能是因为一堆IO批刚刚返回,正在等待处理,用户在我的站点上执行一个操作,需要立即发送IO请求,然后在该请求返回时立即处理

我从未编写过Node.js应用程序,它需要我真正担心伸缩性,因此我对它以正确顺序处理事件的能力没有100%的信心。这是一件愚蠢的事吗?Node.js处理事情的速度会如此之快,以至于我永远都不会注意到阻塞,还是很有可能随着我的扩展,我会开始看到正在处理的重要事情出现大量延迟

如果这是一个合理的担忧,Node.js中是否有任何接口可以手动为事件队列排定优先级

更新:

@里卡多·托马斯(Ricardo Tomasi)在评论中提出了一个很好的观点,即如果我的应用程序真的是CPU密集型的,那么它可能不属于Node.js。这让我意识到我的应用程序并没有CPU密集型,而且可能运行良好

为了进一步证明这一点,我做了一些基准测试:

var a = new Date().getTime() + 1000; 
var b = new Date().getTime(); 
var c = 0; 
while(b < a) { 
    c++; 
    b = new Date().getTime();
} 
console.log(c + " loops in 1 second."); 

我的循环数不到200000圈,这充分证明了我没有什么可担心的。但是,我仍然想知道是否有任何方法可以手动管理Node.js事件队列。有人知道吗?

如果您正在执行CPU密集型任务,请将它们卸载到其他进程。事件将按其添加的顺序触发,但这是在一个事件循环内-任何其他事件都可以阻止它。我所做的任何事情都不是难以置信的CPU密集型-我只是做了很多!我只是在考虑可能有1000个用户同时请求数据的情况。。当然1000会有一定的延迟,不管我的应用程序有多CPU密集。这是什么样的测试?对实际系统施加一些压力,看看瓶颈在哪里。很可能是IO绑定,而不是CPU绑定,但在测量之前,您永远不会知道。@ScottWegner Node.js背后的前提是它以非阻塞方式执行IO。它在主线程上连续运行javascript,并使用子线程或子进程,更像IO。当IO完成时,它会调用主线程,并返回要处理的事件队列。这就是Node.js如此漂亮的原因。