进程生成的线程可以在多核系统的不同核心上运行吗?
假设我有一个进程 P,从中生成了两个线程 t1 和 t2,它是一个具有两个核心 C1 和 C2 的多核系统。我的问题是:
- t1 和 t2 是否可以与进程 P 运行在同一内存空间上?
- 线程 t1 是否可以在与进程 P 运行的不同内核中执行?例如:进程 P 运行在核心 C1 上,线程 t1 运行在核心 C2 上?
进程产生的线程可以在多核系统的不同核心上运行吗?
是的。假设硬件有多个核心,并且操作系统支持/允许。 (现代操作系统确实支持它。是否允许通常取决于管理策略。)
线程 t1 和 t2 会与进程 P 运行在同一内存空间吗?
是的。他们将使用相同的内存/虚拟地址空间。
线程 t1 是否可以在与进程 P 运行的不同内核中执行?例如,进程P运行在核心C1上,线程t1运行在核心C2上?
这个问题没有意义。
POSIX 进程没有执行代码的能力。执行代码的是进程线程。因此,“进程在核心 C1 上运行”的想法是荒谬的。
请记住:每个(实时)POSIX 进程has至少一个线程。该进程从一个线程开始,如果需要,该线程可以生成其他线程。线程到核心的实际分配是由操作系统完成的,并且会随着进程的生命周期而变化。
这就是线程在现代操作系统中的工作方式。对于 Linux,当前(符合 POSIX 标准)线程实现方法是在 2003 年的 Linux 2.6 中引入的。在 Linux 2.6 内核之前,Linux 没有真正的本机线程。相反,它有一个名为 LinuxThreads 的工具:
“LinuxThreads 存在许多问题,主要是由于使用了clone
系统调用来创建共享父进程地址空间的新进程。例如,线程具有不同的进程标识符,导致信号处理出现问题; LinuxThreads 使用信号 SIGUSR1 和 SIGUSR2 进行线程间协调,这意味着这些信号不能被程序使用。”
(From 维基百科 https://en.wikipedia.org/wiki/LinuxThreads.)
在(2003 年之前!)LinuxThreads 模型中,“线程”实际上是一个进程,进程可以与其他进程共享其地址空间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)