一、线程的认识
1、线程:Linux下线程是一个轻量级进程,以进程pcb模拟实现,pcb是控制一个程序运行的描述,并且与这些pcb
共用同一个虚拟地址空间,共享进程中的大部分资源,所以相较于传统进程更加轻量化;
2、线程的独有与共享
进程是操作系统资源分配的基本单位:程序运行起来后系统分配的资源是给整个进程组的;
线程是CPU调度的基本单位:CPU通过调度pcb实现程序的调度;
独有:为了避免线程之间调用栈混乱,每个线程都有自己的栈区、寄存器、线程id、调度优先级、errno、信号屏蔽字;
共享:虚拟地址空间(代码段—数据段)、文件描述符表、信号处理方式、用户id和组id、当前工作路径/目录
3、线程异常
1>单个线程如果出现除零、野指针问题导致线程崩溃,随之也会导致进程崩溃;
2>线程是进程的执行分支,线程出现异常,进程就会出现异常;
4、线程的用途
1>合理利用可以提高CPU密集型程序的执行效率;
2>合理利用可以提高I/O密集型程序的用户体验;
5、线程的优点
1>创建一个线程远比创建一个进程代价小得多;
2>与进程的切换相比,线程之间的切换所需操作系统的工作量很少;
3>线程占用资源比进程少;
4>能充分利用多处理器的可并行数量;
5>计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现;
6>I/O密集型应用,为了提高性能,将I/O操作重叠。线程同时可以等待不同的IO操作;
6、线程的缺点
1>性能损失:如果有大量线程,它的创建、切换、销毁都会增加额外的同步和调度开销,
且可用的资源是不变的,所以会有较大性能损失;
2>健壮性低:线程与线程之间缺乏保护;
3>缺乏控制访问:进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响;