本文已参与「新人创作礼」活动,一起开启掘金创作之路。
内核线程
内核线程是由操作系统管理的,线程对应的 TCB 自然是放在操作系统里的,这样线程的创建、终止和管理都是由操作系统负责。
内核线程的优点:
- 在一个进程当中,如果某个内核线程被阻塞,并不会影响其他内核线程的运行;
- 分配给线程,多线程的进程获得更多的 CPU 运行时间;
- 内核线程是多核处理机分配的单位
内核线程的缺点:
- 在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息,如 PCB 和 TCB;
- 线程的创建、终止和切换都是通过系统调用的方式来进行,因此对于系统来说,系统开销比较大;
轻量级线程
轻量级进程(Light-weight process,LWP)是内核支持的用户线程,一个进程可有一个或多个 LWP,每个 LWP 是跟内核线程一对一映射的
多线程模型
在同时支持用户级线程和内核级线程的系统中,由几个用户级线程映射到几个内核级线程的问题引出了“多线程模型”问题。(具有一对一、多对一、多对多)
一对一
- UT=用户线程;LWP=轻量级进程;KLT=内核线程
优点:每个线程都是独立的调度单元,直接利用操作系统内核提供的调度功能。
缺点:用户线程的阻塞唤醒,会直接映射到内核线程上,容易引起频繁切换,降低性能。
多对一
优点:提升并发量上限,大部分调度和同步操作都在用户空间内完成,减少状态切换,能够提升性能。
缺点:当一个用户线程进行了内核调用并阻塞了,那么其他线程在这段时间里都无法进行内核调用。
多对多
- 集二者之长