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