操作系统是否将每个进程分配给单独的核心?

操作系统是否将每个进程分配给单独的核心?

好吧,我知道避免使用四核的经典论点。在应用程序级别,大多数应用程序尚未针对多核编写。大多数桌面软件甚至不需要并行化。

然而,在操作系统层面,操作系统显然会将进程划分到各个核心上。这本身难道不是获得更多核心的理由吗?这在很多情况下不是有很大帮助吗?你得到了一些 CPU 密集型任务——这些进程可能各自占用了 100% 的核心,但我仍然可以在最后一个核心上浏览网页并在 SuperUser 上提问……对吧?

答案1

操作系统无法将单个单线程进程拆分到多个内核(尽管它可以更改应用程序在哪个内核上运行,但这是另一个问题),但它可以运行多个进程,每个进程都在自己的内核上运行。因此,是的,如果您在后台运行多个处理器密集型应用程序,则很可能仍会有一个闲置的内核,您可以用它运行其他应用程序,而这些内核几乎不做任何事情。

答案2

补充一下 @heavyd 的回答,造成这种情况的原因是操作系统无法确定进程的哪些部分可以并行运行,哪些部分不能。如果程序不是设计为在并行核心上运行,那么应用程序内可以同时运行设计为按顺序运行的例程。这可能会导致各种问题(例如,如果两个例程使用相同的内存块,但不应同时运行)。

操作系统可以使用多个核心来执行多个进程,因为它无论如何都会这样做,但是将单核应用程序分布在多个核心上会导致各种意外行为。

答案3

说到底,处理器的使用率是 1% 还是 95% 并不重要(只要它稳定在 95% 且没有达到峰值),只要没有达到 100%,程序就会以相同的速度运行。未使用的 CPU 周期只是浪费。

因此,Windows 7(在兼容处理器上)拥有一项称为“核心停车”的技术,该技术基本上可以禁用计算机上未使用的核心以节省电力。

单线程应用程序会自动转移到备用核心 - 我不确定这背后的技术,但我知道它运行得很好。

答案4

您最初的想法是正确的 - 对多核心确实存在负面倾向,而且这实际上并不是应得的。

以前,大多数用户只使用台式电脑进行简单的文字处理,这或许是一个争论。但如今,随着浏览器拥有多个标签,每个标签都在自己的进程中(Chrome 和 IE 对标签进行进程级分离),再加上网页内的视频解码器和可以轻松卸载的额外任务(如即时渲染效果,即 css3),即使单单浏览器也能证明需要更多内存和几个核心的理由。

除此之外,一些用户可能也会在这台电脑上玩游戏,或者使用 garageband、imovie、handbrake 等工具,多核可以带来巨大的好处。

假设您需要将一个核心最大化(​​即单个核心上的 CPU 使用率达到 100%)才能使另一个核心发挥作用,这是不正确的。因为我们在这里讨论的是并行性。CPU 内的任务切换通常会在将其堆栈交换到另一个进程之前执行一批操作。并非所有这些任务都受 CPU 限制,因此即使核心被锁定,您也不会看到 CPU 峰值。

基本上,你是对的,但最有效的核心数是多少? 2? 4? 12? 这很可能取决于用户的习惯... 对于大多数用户,我倾向于使用 2-4,但我只是猜测。

相关内容