OS是否将每个进程分配到单独的核心?


15

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

但是,在OS级别,似乎OS可以将进程划分为各个核心。难道这本身就不是争取更多核心的争论吗?这在很多情况下不是很有帮助吗?您会执行一些CPU密集型任务-这些进程可能各自占用100%的内核,但是我仍然可以浏览Web并在最后一个内核上向SuperUser提问。


这个问题和答案的基本流程是假设单个进程是单线程的。在许多情况下并非如此。即使进程是单线程的,也有几个系统库/ dll添加了它们自己的线程。
harrymc

Answers:


12

操作系统无法将单个单线程进程拆分为多个内核(尽管它可能会更改应用程序在哪个内核上运行,但这是一个不同的问题),但是它可以在单个内核上运行多个进程。因此,是的,如果您在后台运行多个处理器密集型应用程序,则很可能您仍然会有一个备用核心,几乎没有做任何事或可以做任何事来运行其他应用程序。


这里的关键词是,如果您有多个处理器密集型应用程序–对于大多数用户而言,这种情况并不常见。
吉尔斯(Gillles)“所以-别再邪恶了”

感谢您的回复。是的,后一种情况就是我要描述的情况。
Doug T. 2010年

3

要添加到@heavyd的答案中,其原因是操作系统无法确定进程的哪些部分可以并行运行,哪些不能并行运行。如果程序并非旨在在并行内核上运行,则可以在应用程序中包含旨在同时运行的例程。这可能会引起各种各样的问题(例如,如果两个例程使用相同的内存块,但并不意味着要同时运行)。

操作系统可以这样做,因此可以将多个内核用于多个进程,但是将单个内核应用程序分布在多个内核上会导致各种意外行为。


谢谢。我明白那个。我的问题可能措辞不佳。我的意思是问更多有关将进程放在不同内核上的信息。用某种方式神奇地使单线程进程跨越核心。
Doug T. 2010年

3

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

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

单线程应用程序会自动放置到备用内核中-我不确定这背后的技术,但我知道它的效果很好。


2

您最初的想法是正确的-对多个核心存在负面倾向,但这并不是应有的。

早在大多数用户仅使用台式机进行简单文字处理的时代,就有了争论。但是如今,诸如带有多个选项卡的浏览器之类的东西,每个都在各自的进程中(chrome和即对选项卡进行进程级分离),以及诸如网页中的视频解码器之类的东西以及额外的任务,这些任务很容易被即时卸载。渲染效果又称为css3,即使是仅浏览器也可以说明增加更多ram和几个内核的原因。

另外,有些用户可能也在此PC上玩游戏,或者使用诸如garageband,imovie,handbrake之类的工具,多个内核,这可能是一个巨大的好处。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.