使用未充分利用的CPU是否可以阻塞CPU?

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

在上下文中,我有一个非常愚蠢的问题,CPU是否可能(假设单核心)没有调峰的CPU?

在你的上下文中,“CPU阻塞”只是意味着node.js正在运行Javascript的单核是繁忙的。 而且,一个给定的核心正在忙碌,它正在全职运行。 您不能拥有运行大型JSON.parse()操作的50%利用率的核心。 它要么正在运行,要么不是。 50%的利用率意味着它只能运行一半的时间,但是运行时却完全“达到了最高点”。

目前典型的CPU有多个内核。 一个大的JSON.parse()操作只能运行在单个核心上。 因此,尽pipe在JSON.parse()操作的持续时间内,该内核将运行max,但其他内核不会,因此整个CPU不一定会被最大化,因为其他内核可用于执行其他工作。

由于node.js是用于执行Javascript的单线程,所以使用这些其他内核的主要方式是产生subprocess来运行某些操作或使用node.js集群,以便多个node.js处理所有到达的服务请求为您的服务器。

我不认为整个CPU会被阻塞,因为你可能有多个核心。 但是, JSON.parse是一个同步命令,它将阻止任何正在运行的进程核心的同步代码执行。 所以我觉得答案是让JSON.parseasynchronous。

有很多方法可以做到这一点,我想这可能取决于你的具体实现,你决定去哪一个:

  • 产生一个subprocess来处理parsing
  • 使用networking工作者(这是更“JavaScript的”)
  • setTimeout包装呼叫
  • 将parsing委托给不同的服务器实例(这很有趣)