一个进程产生的线程能否在多核系统的不同核上运行?
假设我有一个进程P,从中我生成了两个线程t1和t2,并且它是一个具有两个核心C1和C2的多核系统。我的问题是:
- 线程t1和t2是否将在与进程P相同的内存空间上运行?
- 线程t1是否会在与进程P不同的核心上执行?例如:进程P正在核心C1上运行,而线程t1正在核心C2上运行?
一个进程产生的线程能否在多核系统的不同核上运行?
假设我有一个进程P,从中我生成了两个线程t1和t2,并且它是一个具有两个核心C1和C2的多核系统。我的问题是:
进程生成的线程能否在多核系统的不同核心上运行?
可以。假设硬件具有多个核心,并且操作系统支持/允许此功能。(现代操作系统都支持它。是否允许通常取决于管理员策略。)
t1和t2线程将在与进程P相同的内存空间中运行吗?
是的。它们将使用相同的内存/虚拟地址空间。
线程t1能否在与运行进程P不同的核心上执行?例如,进程P在核心C1上运行,而线程t1在核心C2上运行?
这个问题没有意义。
POSIX进程没有执行代码的能力。是进程的线程执行代码。因此,“进程在核心C1上运行”的想法是不合理的。
请记住:每个(活动的)POSIX进程至少有一个线程。进程从一个线程开始,如果需要,该线程可能会生成其他线程。线程分配给核心的实际情况由操作系统完成,并且会随着进程的生命周期而变化。
这就是现代操作系统中线程的工作方式。对于Linux来说,目前实现线程的方式(符合POSIX标准)是在2003年的Linux 2.6版本中引入的。在Linux 2.6内核之前,Linux并没有真正的本地线程。相反,它有一个名为LinuxThreads的设施: