linux – 在几个核心上运行进程

我对核心,进程和线程的工作原理有一个误解:

  • 进程有多个线程。
  • 所有这些线程共享相同的内存部分
  • 核心有它自己的caching和内存地址空间。

所以,当我在Linux操作系统上运行一个进程(包含多个线程),并检查“top -H”命令时,可以看到线程分布在多个内核上。

那么它如何工作? (同一进程的线程,共享相同的进程地址空间,在不同的核心上运行?)?

我在这里想念什么?

谢谢

Solutions Collecting From Web of "linux – 在几个核心上运行进程"

Linux内核调度器是调度任务 。 看到这个答案几乎相同的问题,解释什么是任务。

一个任务可以运行(在给定的时刻)在一个单一的核心。 调度程序可以将任务从一个核心移动到另一个核心(但很少这样做,因为预热一个核心和一级缓存需要时间)。

多线程进程通常有几个任务(每个线程一个),通常可以在多个内核上运行。

你可能应该避免每个进程有大量的线程。 我会推荐最多十几个线程,特别是如果其中几个是可运行的(但细节因硬件和系统而异)

还请阅读处理器亲和力

每次操作系统将CPU切换到另一个线程时,它都会为该线程设置CPU上的所有寄存器。 这包括当前的堆栈,内存访问权限,所有这一切。

所以当同一进程的两个线程运行在两个不同的CPU内核上时,每个内核都被设置为访问该进程内存。

当操作系统决定其中一个线程使用了太多的CPU时间时,它挂起线程并将所有的CPU寄存器复制到内存中。 然后将另一个线程加载到CPU内核中。