一个进程的不同线程可以使用更多的处理器吗?

Can different threads of one process use more processors?

所以我想我在某处读到,在任何给定时间,只有一个进程只能获得 atmost 一个处理器资源。但我也认为我在某处读到每个线程都可以在任何给定时间获得一个处理器资源。后一个语句将与第一个语句相矛盾,因为进程可以存在于更多线程之外。

那么一个进程的线程 运行 可以与该进程的其他线程并行吗? (并行我的意思是 运行 同时通过多个处理器或内核)

是的,他们可以!

这就是多线程程序在多核系统上实现并行的方式。
试想一下,如果不是这样,那么在多核处理器上运行多线程程序就没有意义了。

现在你可能会问调度在多核上是如何实现的? https://pdos.csail.mit.edu/papers/o2:hotos12.pdf

您的问题的答案取决于如何在 system.There 上实现线程是操作系统查看线程和进程之间关系的两种主要方式。

  1. 一个进程有一个地址space,是调度执行的基本单位。

  2. 一个进程有一个地址space,线程是调度执行的基本单位。那么一个进程就是一个地址space和一个或多个可调度的线程。

在 #1(在许多操作系统上使用)中,线程是在库中实现的。进程负责调度自己的线程。在该线程模型中,来自同一进程 运行 的所有线程交错在同一处理器上(尽管在某些系统中它们可能会一起切换处理器)。该进程只能将其自己的线程安排到进程正在 运行 上的处理器上 运行。

在#2(更现代的方法)中,一个进程的线程可以在多个处理器上并发执行。