多核处理器可以同时运行多个进程吗?

Nim*_*Net 10 process multi-core threads

我知道多核处理器可以使用其不同的内核同时运行同一进程的多个线程。
是否也可以同时运行多个进程(每个内核运行不同的进程)?

Maj*_*nko 15

就操作系统和应用程序而言,每个内核都是一个单独的处理器,并遵循与拥有多个处理器相同的关联规则。

进程运行在哪个处理器(无论是真实的、核心的还是超线程的)上完全取决于操作系统的调度系统。正是这个调度系统(受关联设置的影响)决定了进程应该在哪里运行以及何时运行。进程和线程可以在调度程序认为合适的情况下随意在处理器和内核之间切换。


Mok*_*bai 7

根据我对操作系统的有限了解,我相信每个进程至少有一个线程,并且是这些线程被调度,而不是进程本身。该进程只保存有关程序和它已设置运行的线程的信息。这样,单线程应用程序得到与多线程应用程序相同的处理,但多线程应用程序可以更好地使用资源。

例如,假设我们有两个进程,每个进程有两个线程和一个单线程应用程序,都在双核处理器(或双 CPU,这里没有区别)上努力工作

 Process A
    |_Thread A-1
    |_Thread A-2

 Process B
    |_Thread B-1
    |_Thread B-2

 Process C
    |_Thread C
Run Code Online (Sandbox Code Playgroud)

每个线程都可以跨 CPU 的所有内核进行调度,并且负载由 OS 调度程序平衡。

如果我们然后为进程 B 设置处理器关联以将其限制为一个 CPU,那么该进程的所有线程也都绑定到该 CPU,并且不会在任何其他 CPU 上运行。对进程 C 执行相同操作不会导致真正的更改,因为它一次只能在一个 CPU 上运行。