![在多核 Windows PC 上,为什么单个进程仅偶尔使用所有核心?](https://linux22.com/image/1566358/%E5%9C%A8%E5%A4%9A%E6%A0%B8%20Windows%20PC%20%E4%B8%8A%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8D%95%E4%B8%AA%E8%BF%9B%E7%A8%8B%E4%BB%85%E5%81%B6%E5%B0%94%E4%BD%BF%E7%94%A8%E6%89%80%E6%9C%89%E6%A0%B8%E5%BF%83%EF%BC%9F.png)
多年来,我一直认为单个进程最多只能使用 CPU 的一个核心,但最近我发现了两个单个进程使用了多核 Windows 系统的所有核心的例子。
其中一个对于大多数人来说很容易测试:http://fitgirl-repacks.site/donate-by-mining/
关闭浏览器的多进程功能后,网页上的“CPU线程”设置仍然有效,你可以看到单个浏览器进程占用了所有CPU核心。
为什么这种情况只是有时发生,而大多数时候都不会发生(许多程序会产生多个进程来尝试利用多处理器系统)?
答案1
可以编写一个程序来利用多个线程,从而允许它们使用多个核心。
程序也可以将自身拆分为不同的进程,每个都有一个或多个线程来工作。
多线程和多进程之间存在非常微妙但真实的差异。禁用多进程功能不会禁用已经存在的多线程。
最近的浏览器更新允许多进程功能,通过将不同页面的线程分离到各自的进程中,增强了安全性和崩溃容忍度,每个进程仍然可以有多个线程,所有线程都独立工作。
答案2
单个进程可以使用多个核心的方式有多种。
最明显的方法是创建多个执行线程。每个线程都可以在一个核心上进行调度,以便单个进程直接使用多个核心。
但是,单个进程还可以通过其他方式使用多个核心。例如,进程可以从内部能够使用多个核心的操作系统服务发出请求。例如,执行大量磁盘 I/O 的进程可能在一个核心上运行,而另一个核心则运行操作系统代码,完成该进程发起的磁盘 I/O 操作之一。网络和图形操作也可以通过使用多个核心的方式在内部实现。