操作系统如何使用多个CPU内核

时间:2014-11-05 15:03:59

标签: multithreading performance operating-system multicore

有很多文章讨论多核神话。为了真正受益于多个内核,需要编写并行算法。其中许多人提到了Amdahl's law

让我们假设我们有一台带有4核商用CPU的台式电脑。并假设我们的目标是提高我们的应用程序性能以及整体系统性能。

我想知道CPU内核是如何用来执行任务的。

  • 来自单个进程的线程是否分配了所有核心
  • 或者计划在不同的核心上运行来自不同进程的线程。

如果是后者,那为什么神话会被讨论?即使所有进程都是单线程的,多任务操作系统也不会总是受益于多核CPU吗?来自同一进程的线程是否更有可能在多个核心上同时进行调度?

  • 有哪些因素很重要? CPU缓存可能吗?有些应用可能相关吗?为什么?
  • 您为什么要使用并行库/算法?毕竟,CPU资源在所有正在运行的进程之间共享,并且总是有足够的CPU资源。

是否存在“活跃过程”概念?即从调度程序获得最多关注的进程。如果是这样,那么这个过程通常会得到多少关注?

2 个答案:

答案 0 :(得分:4)

  

来自单个进程的线程是否分配了所有核心

  

或者来自不同进程的线程被安排在不同的核心上运行。

是的,那也是。

  

如果是后者,那为什么神话会被讨论?即使所有进程都是单线程的,多任务操作系统也不会总是从多核CPU中受益吗?

在某种程度上,是的。但是,如果这个过程进行了大量的计算,并且是我们在某个特定时间关注的唯一一个,那么收益将会非常低。

另一方面,这也意味着该过程不会因为操作系统必须执行诸如处理磁盘中断,到达的网络数据包或类似的东西而中断。中断处理某些硬件任务的进程不仅可以减少进程获得的CPU时间,而且还会污染CPU高速缓存,从而导致进程在恢复时运行得更慢。因此,多核CPU可以允许单线程进程在更长的时间内以更长的突发时间命令核心。

  

来自同一进程的线程是否更有可能在多个核心上同时进行调度?

通常没有。你为什么想这么做?这会降低整体系统性能,因为来自同一进程的线程更可能踩到彼此的脚趾。您希望系统有效地完成其他进程的工作,以便重新获得CPU。

  

是否存在“活跃过程”概念?

在某种程度上。 Windows正是这样一个概念 - 一个“前台进程”。大多数操作系统没有。但它们确实具有“动态优先级提升”功能。基本上,如果一个过程无所事事,然后需要做某些事情,那么它将被赋予一些优先权作为“奖励”。这允许进行等待工作的过程以快速完成其工作并使系统感觉更具交互性和响应性。它在服务器上通常没什么意义,但它对桌面有帮助。无论是单独在线程上实现还是作为一个组在进程的所有线程上实现,都是特定于实现的。

答案 1 :(得分:0)

如果您运行不需要彼此交互的单独进程或线程,那么拥有4个内核而不是只有1个内核会好得多。

只要进程或线程需要共享某些数据,您就会获得序列化对共享数据的访问的开销。

很大程度上取决于在多核CPU上运行应用程序的程度。在最坏的情况下,尝试在4核CPU上运行应用程序比在单核CPU上运行应用程序要慢得多;更有可能的是,性能的提升远远低于100%。

相关问题