线程引入
1.应用的需要
2.开销的考虑
1.创建,撤销,通信,切换。时间/空间开销大,限制了并发度的提高
2.线程的开销小,创建,切换开销小,同一进程内线程共享内存和文件
3.性能的考虑
如果没有线程
1. 一个服务进程
1.顺序编程:性能下降
2. 有限状态机
1.采用非阻塞I/O
构造服务器的三种方法
模型 |
特性 |
多线程 |
有并发,阻塞系统调用 |
单线程 |
无并发,阻塞系统调用 |
有限状态及 |
有并发,非阻塞系统调用,中断 |
线程的基本概念
1.进程的2个基本属性:资源拥有者,cpu调度单位
2.线程继承了cpu调度单位这一属性
3.线程是进程中的一个运行实体,是cput调度的单位,有时将线程称为轻量级进程
线程的属性
1.有标识符id
2.有状态及状态转换
3.不运行时要保存上下文环境
1.有上下文环境:程序计数器等寄存器
4.有自己的堆栈指针
5.共享进程地址空间和其他资源
线程机制实现
1.用户级线程
1.在用户空间建立线程库,提供一组管理线程的过程
2.运行时系统:完成线程的管理工作(操作,线程表)
3.内核管理的还是进程,不知道线程的存在
4.线程的切换不需要内核态特权
用户级线程小结
优点:
1.线程切换快
2.调度算法是应用程序特定的
3.用户级线程可运行在任何操作系统上(只需要实现线程库)
缺点:
1.内核只将cpu分配给进程,同一进程中的2个线程不能同时运行在2个处理器上
2.大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有的线程也被阻塞
核心级线程
1.内核管理所有线程管理,并向应用程序提供api接口
2.内核维护进程和线程上下文
3.线程的切换需要内核支持
4.以线程为基础进行调用
混合模型
1.线程创建在用户空间完成
2.线程调度等在核心态完成
线程应用场景
可再入程序(可重入):
可被多个进程同时调用的程序,具有下列性质
1.它是纯代码的,即在执行过程中自身不改变,调用它的进程应该提供数据区