我们编写了一个Windows服务,它会触发单独的工作进程来执行各种CPU密集型任务。服务器和工作人员通过IPC命名管道进行通信。
目前,我们通过简单的Process.Start()
电话创建工作人员。
当我们在相当低规格的双核服务器VM上运行大量工作人员时,任务管理器告诉我们每个工作人员使用大约2-3%的CPU。
然而(这让我们感到困惑),当我们在非常强大的八核服务器上执行相同的测试时,我们仍然看到每个工作进程使用2 - 3%的CPU。现在,因为有更多的CPU“功率”可用,我希望看到每个工作人员使用更小的CPU。
这也意味着在低功耗服务器上,我们在创建30个工作进程后达到100%CPU。但是在高功率CPU上,我们在相同数量的工作人员之后达到了相同的限制。我们希望能够管理更多的工人。
所以,我有几个问题:
我们是否误解了任务管理器告诉我们的价值观? CPU%值是所有内核消耗的CPU时间量?如果是这样,为什么在完全不同的硬件上它是一样的?
我们是否应该做一些特殊/不同的事情来正确地将我们的工作流程分布到多个核心?目前,这些进程具有默认的处理器关联(因此它们可以在任何核心上运行)。
任何帮助,建议,链接都将不胜感激。
留下评论的人的一些额外信息:
我最初没有提到它,因为我不一定想为我的问题增加额外的复杂性,但我们的工作流程正在对实时视频流进行视频转码。因此,没有工作人员“完成”其任务 - 只要客户端连接就可以工作。
本质:
不确定这是否有助于其他任何建议?感谢到目前为止的所有评论。
答案 0 :(得分:1)
进程使用2-3%的CPU这一事实表明您的进程不受CPU限制,而是可能受IO限制或存在其他限制。
2核心服务器 VM 上的IO可能比您的8核服务器慢得多,后者反过来限制了那里的行为。这可能就是表面CPU使用率相同的原因,但我怀疑整个服务器可能会更快地完成任务。