线程:在一个程序里的一个执行路线
线程是一个进程内部的执行序列
TCB——线程控制块
一个进程至少有一个执行流,一个执行流就是一个线程
1、进程和线程
·进程是资源竞争的基本单位
·线程是程序执行的最小单位
·线程共享进程数据,单也有自己私有的数,例:线程ID、独立的上下文(一组寄存器、栈)、errno、信号屏蔽字、调度优先级
进程:承担分配基本资源的实体
线程:CPU调度的基本单位
Linux下的线程称为轻量级进程(LWP)
一个进程的多个线程之间共享同一地址空间,因此Text Segment、Date Segment都是共享的:
(1)如果定义一个函数,在线程中都可以调用
(2)如果定义一个全局变量,在个线程中都可以访问到
(3)文件描述符
(4)每种信号的处理方式
(5)当前工作目录
(6)用户id和组id
2、线程的优点
(1)创建一个新线程要比创建一个新进程的代价小得多
(2)与进程之间的切换相比,线程之间的切换需要操作系统做的工作少得多
(3)线程占用的资源要比线程少很多
(4)能充分利用多处理器的可并行数量
(5)在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
(6)计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
(7)I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作
3、线程的缺点
(1)性能损失:一个很少被外部事件阻塞的计算密集型线程往往无法与其他线程共享同一个处理器
(2)健壮性降低(一个线程奔溃了会影响其他的线程)
(3)缺乏访问控制:进程是访问控制的基本粒度,在一个线程中调用某个OS函数会对整个进程造成影响
(4)编程难度提高:编写和调试一个多线程程序比单线程程序难很多