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