【问题标题】:How are multiple CPU cores used by the OS操作系统如何使用多个 CPU 内核
【发布时间】:2014-11-05 15:03:59
【问题描述】:

有很多文章讨论多核神话。也就是说,为了真正从多核​​中受益,需要编写并行算法。他们中的许多人都提到了Amdahl's law

为简单起见,假设我们有一台配备 4 核商用 CPU 的台式计算机。并假设目标是提高我们的应用程序性能以及整体系统性能。

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

  • 是否为单个进程的线程分配了所有内核
  • 或者来自不同进程的线程被安排在不同的内核上运行。

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

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

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

【问题讨论】:

  • 这是一个非常广泛的话题,我认为不适合 Stackoverflow。对你的问题的回答会很长而且很复杂:肯定比这里适合的时间要长得多。您最好对操作系统进行一些研究,然后在了解它们如何工作的基础知识后再提出具体问题。对您的问题的简短回答是,现代操作系统尽可能利用多核 CPU。大多数都是按线程而不是按进程进行调度的。
  • 操作系统调度线程,而不是进程。当线程由作为“前台”的进程拥有时,可以提高线程的优先级,并与用户进行交互。如果您没有编写使用线程的代码,那么多核处理器仅在您同时运行多个进程并且这些进程烧毁核心时才有用。在个人电脑上并不常见。
  • 对没有明显编程影响的广泛问题投票 -1 (stackoverflow.com/help/on-topic) 并且显示的研究工作很少。您可以尝试在Theoretical Computer Science Stack Exchange 提问或使用stackoverflow.com/questions/26675766/… 中的指针来了解更多信息,然后再尝试构建一个实用的问题
  • 我不是学生,除了有很多工作要做之外,我还有很多其他的事情要研究。我不是那些被极客包围并且可以回答棘手问题的幸运者之一。无论这个问题多么广泛(而且没有一个),如果您知道答案,那么回答一些问题有什么问题? “是否为单个进程的线程分配了所有内核”,太难回答了……“是否存在“活动进程”的概念?”哦,太难了……投反对票很容易。回答问题不是...
  • @user2248972 有趣的是,许多 SO 贡献者都是熟练且经验丰富的开发人员,他们“有很多工作要做”,他们的报酬是 $$$/小时。试图把你研究得很糟糕的问题交给他们可能只会惹恼他们。

标签: multithreading performance operating-system multicore


【解决方案1】:

单个进程的线程是否分配给所有内核

是的。

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

是的,也是。

如果是后者,那为什么还要讨论神话?即使所有进程都是单线程的,多任务操作系统是否总是受益于多核 CPU?

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

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

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

通常不会。你为什么想这么做?这往往会降低整体系统性能,因为来自同一进程的线程更有可能踩到彼此的脚趾。您希望系统高效地完成其他进程的工作,从而让 CPU 恢复正常。

是否存在“活动进程”的概念?

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

【讨论】:

    【解决方案2】:

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

    一旦进程或线程需要共享一些数据,您将获得序列化对共享数据的访问的开销。

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

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 2016-10-21
      • 2014-05-27
      • 2015-04-03
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2011-07-28
      • 2021-06-04
      相关资源
      最近更新 更多