并发线程、进程和多个内核



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

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

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

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

3,4:正如上面一段所暗示的那样,根据工作负载,它们可能是 CPU 之间线程的任何分布。 如果线程都是计算密集型的(100% CPU(,则大多数操作系统以足够小的粒度在它们之间切换,以便所有线程都保持活动状态,并且足够大,以至于切换对它们的影响最小。

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

4:根据您的系统,可能有许多性能分析工具可用。 最重要的是,在受 UNIX 启发的系统上,它是提供系统范围利用率信息的简单工具,简单的工具时间将显示进程在 CPU 上花费的时间与实际时间的时间。 如果按顺序运行每个任务,记下它们所花费的 CPU 时间,然后对它们并发运行进行计时,则这些 CPU 时间之间的比率表示并发应用的比例因子。 请注意,由于 io-重叠,现实世界的时间可能会产生误导。

相关内容

  • 没有找到相关文章

最新更新