在一次面试中,我被问到这样一个问题:如果我有双核 CPU,我能同时在两个 CPU 上运行一个线程吗?如果可以的话,它是如何工作的?
答案1
线程是进程管理中的“原子”单元。因此,您无法在多个核心上运行一个线程,也就是说,多个核心同时在线程上工作同时。
但当然,一个程序(进程)可能会跨越两个或多个执行完全相同操作的线程,甚至复制一个线程(包括其当前拥有的所有状态和内存),并让副本作为自己的新线程运行。如果可能,多个线程(无论它们是否执行完全相同的操作、访问相同的内存内容并具有相同的状态)可以(并且很可能会)在不同的核心上运行。
请勿将其与线程混淆搬迁。出于某些原因(例如能源管理),操作系统可能会随时将某个线程从当前运行的核心移到另一个核心。从这个意义上讲,一个线程可能会使用多个核心,但它仍然不会同时使用多个核心同时;相反,它会从一个核心“跳”到另一个核心,在任何给定的时间点使用一个核心。
(为了简单起见,在上面的解释中我没有区分超线程和真实核心;我认为在这种情况下这是可以的。)