一、什么是线程,为什么要引入线程
1.在引入线程之前,进程是资源分配的基本单位,也是调度的基本单位。引入线程之后,线程是CPU调度的基本单位。
2.由于切换进程时,需要保存/恢复进程运行环境,还需要切换内存地址空间(更新快表、更新缓冲),由此引入线程,引入线程后,同一个进程内各个线程间并发,不需要切换进程运行环境和内存地址空间,省时省力。
**注意:**从属于不同进程的线程间的切换,也会导致进程的切换,开销也大。
3.引入进程的目的是为了更好的让多道程序并发执行,提高资源利用率和系统吞吐量;而引入线程的目的则是为了减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
二、线程的特性和优点
1.各个进程的内存地址空间相互独立,只能通过请求操作系统内核的帮助来完成进程之间的通信。但同一个进程下的各个线程之间共享内存地址空间,可以直接通过读/写内存空间进行通信。
2.从属于同一个进程各个线程共享进程的所有资源。
3.进程之间的 通信必须请求操作系统服务(CPU要求换到核心态),开销大。同进程下的线程间通信不需要操作系统干预,开销更小。
4.引入线程前,进程既是资源分配的基本单位,也是调度的基本单位。但是引入线程后,进程是资源分配的基本单位,而线程是调度的基本单位。同样线程也有运行态,就绪态和阻塞态。
5.在多核CPU环境下,各个线程也可以分配到不同的CPU上并行的执行。
6.引入线程后,进程是资源分配的基本单位。而线程几乎不拥有资源,只拥有极少量的资源(线程控制块TCB、寄存器信息、堆栈等)