Linux - 在多个核心上运行进程

5
我对核心、进程和线程的工作原理存在误解:
  • 进程有多个线程。
  • 所有这些线程共享同一内存区域。
  • 核心拥有自己的缓存和内存地址空间。

因此,当我在Linux操作系统上运行一个包含多个线程的进程,并检查“top -H”命令时,我可以看到这些线程分布在多个核心上。

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

我错过了什么吗?

谢谢

2个回答

4
Linux内核调度程序正在调度任务。请参阅此答案,了解任务的含义。
一个任务可能会在某个单一核心上运行(在某个时刻)。调度程序可以将任务从一个核心移动到另一个核心(但很少这样做,因为启动一个核心及其L1缓存需要时间)。
一个多线程进程通常有几个任务(每个线程一个任务),通常可以在几个核心上运行。
您可能应该避免每个进程拥有大量线程。我建议最多使用一打线程,特别是如果其中几个是可运行的(但细节因硬件和系统而异)。
还请阅读有关处理器亲和力的内容。

1
每当操作系统将CPU切换到另一个线程时,它会为该线程设置CPU上的所有寄存器,包括当前堆栈、内存访问权限等。
因此,当同一进程的两个线程在两个不同的CPU核心上运行时,每个核心都被设置为访问该进程的内存。
当操作系统决定其中一个线程使用了太多的CPU时间时,它会挂起该线程并将所有CPU寄存器复制到内存中。然后,它会将另一个线程加载到CPU核心中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接