线程模型和虚拟处理器
用户线程通过线程库映射为内核线程。 完成该映射的方式称为线程模型。
有三种可能的线程模型,它们对应于将用户线程映射为内核线程的三种不同的方法。
- M:1 模型
- 1:1 模型
- M:N 模型
用户线程与内核线程的映射是通过使用虚拟处理器来完成的。 虚拟处理器 (VP)是一个库实体,通常为隐式。 对于用户线程而言,VP 所行为就像 CPU 一样。 在库中,VP 是一个内核线程或绑定到内核线程的结构。
在 M:1 模型中,所有的用户线程均映射为一个内核线程;所有的用户线程都在一个 VP 上运行。 该映射是由库调度程序处理的。 所有的用户线程编程工具则完全由库处理。 该模型可以在任何系统上使用,尤其是传统的单线程系统。
在 1:1 模型中,每个用户线程均映射为一个内核线程;每个用户线程都在一个 VP 上运行。 大多数用户线程编程工具由内核线程直接处理。 此模型是缺省模型。
在 M:N 模型中,所有的用户线程都映射为一个用户线程池;所有的用户线程都在一个虚拟处理器池上运行。 用户线程可绑定到一个特定的 VP,就像在 1:1 模型中一样。 所有未绑定的用户线程则共享剩余的 VP。 这是最有效和最复杂的线程模型;用户线程编程工具在线程库和内核线程之间共享。 可以通过将环境变量 AIXTHREAD_SCOPE 设置为 P 来设置此模型。