【问题标题】:linux - run process on several coreslinux - 在多个内核上运行进程
【发布时间】:2014-08-19 18:21:13
【问题描述】:

我对内核、进程和线程的工作方式存在误解:

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

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

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

我在这里想念什么?

谢谢

【问题讨论】:

    标签: linux multithreading


    【解决方案1】:

    Linux 内核调度程序正在调度任务。请参阅 this answer 以了解几乎相同的问题,该问题解释了任务是什么。

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

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

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

    另请阅读processor affinity

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-02-05
        • 2016-04-25
        • 1970-01-01
        • 1970-01-01
        • 2019-09-29
        • 2017-08-07
        • 2013-07-21
        • 2011-12-15
        • 1970-01-01
        相关资源
        最近更新 更多