多核CPU,多线程和上下文切换



假设我们有一个带有20个内核的CPU,并且具有20个CPU密集型的过程,与彼此之间的线程无关:每个CPU核心一个线程。我试图弄清在这种情况下是否发生上下文切换。我相信这是因为操作系统中也需要CPU时间的系统流程。

我知道有不同的CPU体系结构,一些答案可能会有所不同,但请您解释:

  • 上下文切换如何发生,例如在Linux或Windows以及一些已知的CPU架构上?在现代硬件上的引擎盖下会发生什么?
  • 如果我们有10个核心和20个线程或相反的方式怎么办?
  • 如果我们有n个CPU,如何计算我们需要多少个线程?
  • 上下文切换后,CPU缓存(L1/L2)是否为空?

谢谢

上下文切换如何发生,例如在Linux或Windows上以及一些已知的 CPU架构?在现代硬件上的引擎盖下会发生什么?

当中断发生时,会发生上下文开关,并且该中断与内核线程和处理状态数据一起指定了一组与中断之前运行的集合不同的运行线程。请注意,用OS术语,中断可以是"真实"硬件中断,会导致驱动程序运行,并且该驱动程序请求调度运行,或者是从已经运行的线程中的SYSCALL。无论哪种情况,OS调度状态机器都决定是否更改可用内核上运行的线程集。

内核可以通过停止线程和运行其他线路来更改运行线程的集合。它可以通过排队prement请求并生成硬件中断该核心来迫使核心运行其Intercessor驱动程序以处理请求。

,可以停止任何核心上运行的线程。

如果我们有10个核心和20个线程?

取决于线程在做什么。如果它们处于任何其他状态,除了就绪/运行(例如在I/O或线程间通讯上阻止),则它们之间将没有上下文切换,因为什么都没有运行。如果它们都准备就绪/跑步,其中10个将永远在10个内核上运行,直到中断为止。大多数系统都有一个定期计时器中断,可以具有在线程周围共享可用核心的效果。

或另一种围绕

的方式

10个螺纹在10个内核上运行。其他10个核心被停止。操作系统可能会在核心周围移动线程,例如。为了防止在整个模具上散热不平坦。

如果我们有n个CPU,如何计算我们需要多少个线程?

app依赖性。如果所有内核总是用与核心一样多的现成线程用用100%用用用用用的时间,但是,由于大多数线程被阻止的时间比它们运行的时间要多得多,但很难,除了某些终端案例(例如 - (例如 - 您在20个内核上的'20 CPU密集型线程'),提出任何最佳数字。

上下文切换后,CPU缓存(L1/L2)是否为空?

也许 - 这完全取决于线程的数据使用情况。像往常一样,缓存将被重新装载。没有"上下文切换总缓存重新加载",但是,如果线程在运行时访问不同的大量数据,则(至少L1)在线程运行期间确实会完全重新加载。

<</p> <</p>

最新更新