Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果当前请求的计算量很大,node.js服务器如何服务下一个请求?_Javascript_Node.js - Fatal编程技术网

Javascript 如果当前请求的计算量很大,node.js服务器如何服务下一个请求?

Javascript 如果当前请求的计算量很大,node.js服务器如何服务下一个请求?,javascript,node.js,Javascript,Node.js,假设我使用的是一个节点服务器,有一个api正在生成一个从1百万到1百万的系列,即非常巨大的cpu操作,所以在这种情况下,其他到服务器的请求排队等待很长时间,这会破坏用户体验,因为节点是单线程的 对于node.js,我们还有什么其他解决方案可以让其他请求不等待那么久吗 如果当前请求的计算量很大,node.js服务器如何服务下一个请求 如果计算发生在主线程上,并且没有被划分成更小的部分,则不会发生 要在CPU密集型任务期间有机会服务其他请求,您需要: 将计算分解为多个部分,并使用setImmedia

假设我使用的是一个节点服务器,有一个api正在生成一个从1百万到1百万的系列,即非常巨大的cpu操作,所以在这种情况下,其他到服务器的请求排队等待很长时间,这会破坏用户体验,因为节点是单线程的

对于node.js,我们还有什么其他解决方案可以让其他请求不等待那么久吗

如果当前请求的计算量很大,node.js服务器如何服务下一个请求

如果计算发生在主线程上,并且没有被划分成更小的部分,则不会发生

要在CPU密集型任务期间有机会服务其他请求,您需要:

将计算分解为多个部分,并使用setImmediate或process.nextTick运行它们 为该任务使用外部进程,并像使用HTTP、TCP、IPC或子进程生成,或使用队列系统、发布/订阅等调用任何其他外部程序或服务一样调用该任务。 在C++中编写一个本地插件,并使用线程来实现 重要的是,您需要在V8线程中经常展开堆栈,以便事件循环有机会尽可能频繁地处理事件。请记住,当您有一个耗时10秒的长计算,并将其划分为1000个较小的部分时,您的服务器仍将被阻止,无法提供新请求或任何其他I/O或事件1000次,每次持续10毫秒

如果您有大量CPU密集型操作,那么我强烈建议您将它们移出处理请求的进程,这不仅是因为阻塞了事件循环,还因为在这种情况下,您希望同时利用所有的内核,因此最好是让尽可能多的进程或线程与CPU中的内核一样执行CPU繁重的工作,或者让更多的进程或线程使用超线程,并将所有I/O绑定操作放在一个单独的进程中这不会自行处理CPU繁重的操作

如果当前请求的计算量很大,node.js服务器如何服务下一个请求

如果计算发生在主线程上,并且没有被划分成更小的部分,则不会发生

要在CPU密集型任务期间有机会服务其他请求,您需要:

将计算分解为多个部分,并使用setImmediate或process.nextTick运行它们 为该任务使用外部进程,并像使用HTTP、TCP、IPC或子进程生成,或使用队列系统、发布/订阅等调用任何其他外部程序或服务一样调用该任务。 在C++中编写一个本地插件,并使用线程来实现 重要的是,您需要在V8线程中经常展开堆栈,以便事件循环有机会尽可能频繁地处理事件。请记住,当您有一个耗时10秒的长计算,并将其划分为1000个较小的部分时,您的服务器仍将被阻止,无法提供新请求或任何其他I/O或事件1000次,每次持续10毫秒


如果您有大量CPU密集型操作,那么我强烈建议您将它们移出处理请求的进程,这不仅是因为阻塞了事件循环,还因为在这种情况下,您希望同时利用所有的内核,因此最好是让尽可能多的进程或线程与CPU中的内核一样执行CPU繁重的工作,或者让更多的进程或线程使用超线程,并将所有I/O绑定操作放在一个单独的进程中单线程并不意味着进程将按照先到先得的方式进行调度。我真的不认为多个请求是以先到先得的方式处理的,所以这不会有太大问题。但是,由于处理请求的时间太长,整个系统将变慢

为此,node提供了一个解决方案:


这样做的目的是,你基本上可以生成应用程序的多个实例,所有实例都在同一个端口上运行,因此如果你有多个请求,其中一小部分请求的时间太长,然后集群中的其他子进程可以响应后续请求。

单线程并不意味着这些进程将按先到先得的服务进行调度。我真的不认为多个请求是以先到先得的方式处理的,所以这不会有太大问题。但是,由于处理请求的时间太长,整个系统将变慢

为此,node提供了一个解决方案:


这样做的目的是,您基本上可以生成应用程序的多个实例,所有实例都在同一个端口上运行,因此如果您有多个请求,其中一小部分请求花费的时间太长,那么集群中的其他子进程可以响应后续请求。

什么是FCFS?这个词在问题中没有使用,你也不清楚它的意思
r回答。请原谅我的无知。先到先得。不知道这并不意味着无知或任何不好的事情,我甚至不认为“先到先得”被缩写为fcfs太常见了。我的大学教授就是这么做的,这就是我为什么这么做的原因。抱歉搞混了。什么是FCFS?这个词在问题中没有使用,从你的回答中也不清楚它的意思。请原谅我的无知。先到先得。不知道这并不意味着无知或任何不好的事情,我甚至不认为“先到先得”被缩写为fcfs太常见了。我的大学教授就是这么做的,这就是我为什么这么做的原因。抱歉搞混了。