![]() |
1
2
这实际上取决于“处理一些非常复杂的HTTP请求”正在做什么。node.js将您的javascript作为单个线程运行。这意味着它一次只能做一件事。但是,由于服务器所做的许多事情都与I/O相关(从数据库中读取、从文件中获取数据、从另一台服务器获取数据等等),node.js使用事件驱动的异步I/O,因此它通常会同时出现许多问题,因此它似乎同时处理许多请求。 但是,如果您的复杂HTTP请求是CPU密集型的,使用大量的CPU,那么它将占用单个JavaScript线程,而在占用CPU时,其他任何事情都无法完成。这意味着所有传入的http或socket.io请求都必须在队列中等待,直到one node.js javascript线程空闲,以便它可以从事件队列中获取下一个事件并开始处理该传入请求。 只有当我们看到这个“非常复杂的HTTP请求”的代码时,我们才能更具体地帮助您。 解决node.js中占用CPU的问题的通常方法是将CPU密集型的东西卸载到其他进程中。如果导致问题的主要是这段代码,那么可以旋转几个子进程(可能与服务器中的CPU数量一样多),然后为它们提供CPU密集型工作,让main node.js进程自由处理传入(非CPU密集型)请求,延迟非常低。 如果您有可能占用CPU的多个操作,那么您要么必须将它们全部转移到子进程(可能通过某种工作队列),要么可以部署集群。集群的挑战是给定的socket.io连接将连接到集群中的一个特定服务器,如果恰好是该进程执行占用CPU的操作,那么分配给该服务器的所有socket.io连接都将具有不良的延迟。因此,对于这种类型的问题,常规集群可能不太好。处理CPU密集型工作的工作队列和多个专用子进程可能更好,因为这些进程不会有任何它们负责的外部socket.io连接。 |
![]() |
Softly · 单选按钮未按预期取值 1 年前 |
|
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
![]() |
assembler · Nextjs没有处理发布请求 1 年前 |
|
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
![]() |
Toniq · javascript为php保存多维数组 1 年前 |