线程是什么
在一个程序里的一个执行路线就叫做线程(thread)更准确的定义是:线程是“一个进程内部的控制序列”
一切进程至少都有一个执行线程
进程和线程
进程是资源竞争的基本单位
线程是程序执行的最小单位
线程共享进程数据,但也拥有自己的一部分数据:>线程ID>一组寄存器>栈>errno>信号屏蔽字>调度优先级
线程与进程的关系
一个进程可以包含多个线程,但一个线程只能属于一个进程
线程的优点
1、创建一个新线程的代价要比创建一个新进程小的多
2、与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多
3、线程占用的资源比进程少很多
4、能充分利用多处理器的可并行数量
5、在等待慢速I/O操作结束的同时,程序可执行其他的计算任务
6、计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现
7、I/O密集型应用,为了提高性能,将I/O操作重叠,线程可以同时等待不同的I/O操作
线程的缺点
1、性能损失:
一个很少被外部事件阻塞的计算密集型线程往往无法与其他线程共享同一个处理器,如果计算密集型线程的数量比可
用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是额外的同步和调度开销,而可用的资源不变
2、健壮性降低
编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量
而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的
3、缺乏访问控制
进程是访问控制的基本粒度,在一个线程中调用某些OS函数会对整个进程造成影响
4、编程难度提高
编写与调试一个多线程程序比单线程程序困难很多