线程实现
用户线程
用户线程是基于用户态的线程管理库来实现的,TCB也是在管理库中实现的。操作系统看不到TCB,只能看到PCB。
用户线程的管理调度是用户级线程库函数完成调度的,操作系统不参与。
优点:
每个进程由私有的线程控制块列表,用来管理跟踪线程,TCB使用用户级管理库函数管理,可以用在不支持线程技术的操作系统。
管理由库函数进行管理,不需要内核态和用户态切换,速度快。
缺点:
操作系统不参与线程调度,如果线程发起系统调度被阻塞,那进程所有的线程都不能执行了。
线程开始运行后除非它主动交出CPU否则其他线程无法运行。
时间片短,执行比较慢。
内核线程
内核线程是由操作系统管理的,线程对应的 TCB 、放在操作系统里的,这样线程的创建、终止和管理都是由操作系统负责。
优点:
在进程当中如果发生系统调用被阻塞不会影响到进程中其他线程运行。
分配给线程,多线程的进程获得更多的 CPU 运行时间
缺点:
线程的创建、终止和切换都是通过系统调用的方式来进行,因此对于系统来说,系统开销比较大。
轻量级线程(LWP)
是内核支持的用户线程,一个进程可有一个或多个LWP,每个LWP跟内核线程是一对一映射的,LWP都是由一个内核线程支持的。