【问题标题】:Concurrent threads, processes and multiple cores并发线程、进程和多核
【发布时间】:2020-08-26 13:49:04
【问题描述】:

我正在尝试了解 CPU 内核在并发线程和进程方面的使用情况。请看以下问题:

  1. 假设我有 2 个 CPU 内核。当有 2 个进程在运行时,每个进程只有 1 个线程。这两个进程是否使用 2 个内核?
  2. 假设我有 2 个 CPU 内核。当有 1 个进程在运行时,它有 2 个线程。两个线程是否使用 2 个内核?
  3. 假设我有 2 个 CPU 内核。当有 2 个进程在运行时,每个进程有 2 个线程。这些进程和内核如何使用这两个内核?
  4. 如何计算给定 CPU 内核的最大实际并发执行?我还应该考虑哪些其他因素?

【问题讨论】:

    标签: multithreading concurrency multiprocessing


    【解决方案1】:

    1,2:很有可能,但不一定。系统软件的一部分决定了在哪里运行。当一个进程或线程处于空闲状态时,不太可能选择让一个进程或线程等待 cpu 关注,这不是绝对的。

    大多数处理都涉及到设备、网络等的某种传输。通常,这需要一段时间的不活动等待传输完成。在此不活动期间,另一个进程/线程可以在该 cpu 上运行。因此,如果一个给定的进程是 30% 的 cpu 时间和 70% 的 I/O 时间,那么我可以在单个 cpu 上同时运行大约 3 个而不降低性能。

    3,4:就像上面的段落所暗示的那样,根据工作负载,它们可以是 CPU 中线程的任何分布。如果线程都是计算受限的(100% cpu),大多数操作系统在它们之间切换的粒度足够小,所有线程都保持活跃,并且足够大,切换对它们的影响最小。

    调度可能会考虑其他概念,例如数据亲和性。当线程放弃它时,最近接触的数据位可能会保留在 cpu 缓存中。下次要调度线程时,最好将其放在该 cpu 上,以保留为其预热缓存所需的工作量。它也可能认为一个进程(地址空间)的两个线程更有可能共享数据,因此应该更喜欢同一个cpu。

    4:根据您的系统,可能有许多性能分析工具可用。顶部,在受 UNIX 启发的系统上是一个简单的工具,它提供系统范围的利用率信息,并且简单的工具 time 将显示一个进程在 cpu 上花费的时间与实际时间的对比。如果您按顺序运行每个任务,注意它们占用的 cpu 时间,然后为它们同时运行计时,这些 cpu 时间之间的比率表示您的并发应用程序的缩放因子。请注意,由于 io 重叠,实际时间可能会产生误导。

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 2014-03-02
      • 2011-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多