linux-在多个内核上运行进程
我对内核、进程和线程的工作原理存在误解:linux-在多个内核上运行进程,linux,multithreading,Linux,Multithreading,我对内核、进程和线程的工作原理存在误解: 进程具有多个线程 所有这些线程共享相同的内存部分 Core有自己的缓存和内存地址空间 因此,当我在Linux操作系统上运行一个进程(包含多个线程)并检查“top-H”命令时,我可以看到线程分布在多个内核上 那么它是如何工作的呢?(共享相同进程地址空间的同一进程的线程运行在不同的内核上?) 我错过了什么 谢谢Linux内核调度程序正在调度任务。看一个几乎相同的问题,解释什么是任务 任务可能(在给定时刻)在某个单核上运行。调度器可以将任务从一个核心移动到
- 进程具有多个线程
- 所有这些线程共享相同的内存部分
- Core有自己的缓存和内存地址空间
谢谢Linux内核调度程序正在调度任务。看一个几乎相同的问题,解释什么是任务 任务可能(在给定时刻)在某个单核上运行。调度器可以将任务从一个核心移动到另一个核心(但很少这样做,因为预热核心及其一级缓存需要时间) 多线程进程通常有多个任务(每个线程一个),这些任务通常可以在多个内核上运行 您可能应该避免每个进程都有大量线程。我建议最多使用十几个线程,尤其是其中几个线程是可运行的(但细节会因硬件和系统而异)
另请阅读每次操作系统将CPU切换到另一个线程时,它都会为该线程设置CPU上的所有寄存器。这包括当前堆栈、内存访问权限等等 因此,当同一进程的两个线程在两个不同的CPU内核上运行时,这些内核中的每一个都被设置为访问该进程内存 当操作系统确定其中一个线程占用了太多的CPU时间时,它将挂起该线程并将所有CPU寄存器复制到内存中。然后,它将另一个线程加载到CPU内核中