线程模型
一对一线程模型
多对一的线程模型
N对M的线程模型
线程的两种实现方式
用户级线程
实现在用户态的线程实例,用一个TCB(Thread Control Block)来描述一个用户线程,该TCB存放在用户态。
- 内核看不到用户级线程,对于内核来讲,只能看到当前的进程,在当前进程中创建的线程无法被操作系统调度;
- 用户级线程的创建,销毁,以及切换都是特别快的,不需要用户态和内核态来回切换;
- 当一个用户线程阻塞或者陷入内核,那么当前整个进程都会阻塞,其他的用户线程也将不能使用(可以考虑使用异步调用缓解);
- 进程中的所有用户线程需要主动让出CPU,否则一次性将CPU时间片耗完,因为对于内核来讲,只能看到进程,只能将时间片分配给当前进程;
- 每个进程可以自定义线程调度算法。
用户级线程是由一些应用程序中的线程库实现。
内核级线程
实现在内核态的线程实例,用一个TCB(Thread Control Block)来描述一个用户线程,该TCB存放在内核态,内核可以直接进行调度管理。
- 线程的创建,终止以及切换开销较大,都是由内核完成;
- 内核能感知到线程的存在,被操作系统管理,受操作系统调度;
- 内核时间片的分配是以线程为单位的,内核是将一整个时间片分配给线程的。
协程
协程 = 用户级线程 + 调度器