我们有一个节点服务,我们在其上检测到CPU阻塞。 罪魁祸首是常见的(JSON.Parse())(这是一个纯粹的计算操作)
在上下文中我有一个非常愚蠢的问题,是否可以阻止CPU(假设单核)而不会使CPU达到峰值?
答案 0 :(得分:1)
在您的上下文中," CPU阻止"只是意味着node.js运行Javascript的单核正忙。并且,虽然给定的核心很忙,但它正在全职运行。您无法使用运行大JSON.parse()
操作的50%利用核心。它既可以运行某项操作,也可以不运行。 50%的利用率只意味着它只运行了一半的时间,但是当它运行时,它完全达到峰值并且#34;。
如今典型的CPU有多个核心。一个大的JSON.parse()
操作只能在一个核心上运行。因此,虽然该核心在JSON.parse()
操作期间将运行最大值,但其他核心不会,因此整个CPU不一定会达到最大值,因为其他核心可用于执行其他工作。
由于node.js是Javascript执行的单线程,因此使用这些其他核心的主要方式是生成子进程以运行某些操作或使用node.js聚类,因此您有多个node.js进程所有服务到达您服务器的请求。
答案 1 :(得分:0)
我不认为整个CPU会被阻止,因为你可能有多个核心。但是,JSON.parse
是一个同步命令,将阻止在您的进程运行的任何核心上执行任何剩余的同步代码。所以我认为答案是让JSON.parse
异步。
有很多方法可以做到这一点,我认为这可能取决于您的具体实施,您决定采用哪种方式:
setTimeout