一对一模型
-
一个用户线程唯一的对应一个内核线程(反过来不成立,一个内核线程不一定有对应的用户线程,有可能是闲置的状态)
优点: -
一个线程由于某种原因阻塞时,其他线程的执行不受影响
-
可以让多线程程序在多处理器的系统上有更好的表现
缺点:
- 许多操作系统限制了内核线程的数量,所以用户线程的数量也会收到限制
- 许多操作系统内核线程调度的时候,上下文切换的开销比较大,导致用户线程的执行效率下降
多对一模型
- 将多个用户线程映射到一个内核线程上,线程之间的切换由用户态的代码来实现,系统内核感受不到线程的实现方式。
优点: - 用户线程的建立、同步、销毁都是在用户态中完成,不需要内核的介入。所以说上下文的切换比较快。
- 对用户线程的数量几乎没有限制。
缺点:
- 如果其中一个用户线程阻塞,那么其他所有线程都将无法执行,因为此时内核线程也随之阻塞了。
- 在多处理器系统上,处理器数量的增加对多对一模型的线程性能不会由明显的增加,因为一个进程的所有的用户线程都映射到一个处理器上了
多对多模型
- 将多个用户线程映射到多个内核线程上。
- 由线程库负责在可用的可调度实体上调度用户线程,这使得线程的上下文切换非常快,因为避免了系统调用。
优点:
- 一个线程的阻塞不会导致所有的线程阻塞,因为此时还有别的内核线程调度来执行。
- 多对多模型对用户线程的数量没有限制
- 在多处理器的模型中,多对多模型的线程也能得到一定的性能提升,但提升的幅度不如一对一的大