Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux-在多个内核上运行进程_Linux_Multithreading - Fatal编程技术网

linux-在多个内核上运行进程

linux-在多个内核上运行进程,linux,multithreading,Linux,Multithreading,我对内核、进程和线程的工作原理存在误解: 进程具有多个线程 所有这些线程共享相同的内存部分 Core有自己的缓存和内存地址空间 因此,当我在Linux操作系统上运行一个进程(包含多个线程)并检查“top-H”命令时,我可以看到线程分布在多个内核上 那么它是如何工作的呢?(共享相同进程地址空间的同一进程的线程运行在不同的内核上?) 我错过了什么 谢谢Linux内核调度程序正在调度任务。看一个几乎相同的问题,解释什么是任务 任务可能(在给定时刻)在某个单核上运行。调度器可以将任务从一个核心移动到

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

  • 进程具有多个线程
  • 所有这些线程共享相同的内存部分
  • Core有自己的缓存和内存地址空间
因此,当我在Linux操作系统上运行一个进程(包含多个线程)并检查“top-H”命令时,我可以看到线程分布在多个内核上

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

我错过了什么


谢谢

Linux内核调度程序正在调度任务。看一个几乎相同的问题,解释什么是任务

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

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

您可能应该避免每个进程都有大量线程。我建议最多使用十几个线程,尤其是其中几个线程是可运行的(但细节会因硬件和系统而异)


另请阅读

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

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

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