Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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
Node.js CPU未充分利用时是否可能出现CPU阻塞?_Node.js_Cpu_Blocking - Fatal编程技术网

Node.js CPU未充分利用时是否可能出现CPU阻塞?

Node.js CPU未充分利用时是否可能出现CPU阻塞?,node.js,cpu,blocking,Node.js,Cpu,Blocking,我们有一个检测到CPU阻塞的节点服务。 罪魁祸首是常见的(JSON.Parse())(这是一个纯粹的计算操作) 在上下文中,我有一个非常愚蠢的问题,CPU阻塞(假设为单核)是否可能不达到CPU峰值 在您的上下文中,“CPU阻塞”只意味着node.js运行Javascript的单核正忙。而且,当一个给定的内核繁忙时,它会全天运行。运行大型JSON.parse()操作的内核不能有50%的利用率。它要么在运行操作,要么不运行。50%的利用率意味着它只运行了一半的时间,但当它运行时,它就完全“达到峰值”

我们有一个检测到CPU阻塞的节点服务。 罪魁祸首是常见的(JSON.Parse())(这是一个纯粹的计算操作)

在上下文中,我有一个非常愚蠢的问题,CPU阻塞(假设为单核)是否可能不达到CPU峰值

在您的上下文中,“CPU阻塞”只意味着node.js运行Javascript的单核正忙。而且,当一个给定的内核繁忙时,它会全天运行。运行大型
JSON.parse()操作的内核不能有50%的利用率。它要么在运行操作,要么不运行。50%的利用率意味着它只运行了一半的时间,但当它运行时,它就完全“达到峰值”

如今,一个典型的CPU有多个核心。一个大型的
JSON.parse()
操作只能在一个内核上运行。因此,虽然该内核在
JSON.parse()
操作期间将运行max,但其他内核不会,因此整个CPU不一定会达到最大值,因为其他内核可以执行其他工作


由于node.js是单线程的Javascript执行,使用这些其他核心的主要方法是生成一个子进程来运行某些操作,或者使用node.js群集,这样您就有多个node.js进程来处理所有到达服务器的请求。

我不认为整个CPU都会被阻塞,因为您可能有多个内核。但是,
JSON.parse
是一个同步命令,它将阻止进程运行的任何核心上剩余的同步代码执行。所以我认为答案是使
JSON.parse
异步

有很多方法可以做到这一点,我认为这可能取决于您决定采用哪种方法的具体实现:

  • 生成一个子进程来处理解析
  • 使用网络工作者(这更像“JavaScript风格”)
  • setTimeout
  • 将解析委托给不同的服务器实例(这是一个有趣的实例)

CPU阻塞是什么意思?这是一个宽泛的术语。为什么
JSON.parse
是罪魁祸首,为什么这是“常见的”?通过CPU阻塞,我的意思是,由于当前正在进行的活动,处理器无法执行任何其他活动。这是node.js特有的一种情况,在这种情况下,当解析40+MBs范围内的非常大的json对象时(在支持100 TPS的系统中),CPU会被阻塞/无响应(由于节点的单线程特性)。您是否尝试过在超时时间内包装对
JSON.parse
的调用?我们正在考虑通过各种方法解决此问题,包括1。网络工作者2。集群等。但对这个问题的探讨让我想到CPU阻塞到底意味着什么,它与任何场景下100%的CPU利用率有什么不同吗?你看到这个问题了吗?谢谢你的解释。因此,我可以总结(为了清晰起见进行详细阐述)1。当一个JSON.parse()在单核CPU上运行时,它在运行期间的利用率为100%。2.由于节点是单线程的,所以没有50%的利用率,但无法用于其他操作?