一、线程存在的原因
- 在许多应用中,同时发生着多种活动,其中某些活动随着时间的推移会被阻塞,通过将这些应用程序分解成可以准并行运行的多个顺序线程,程序设计模型会变得简单。
- 线程比进程更轻量级,比进程更容易,容易创建,也容易撤销。
二、线程的定义
进程中的一条执行流程。
进程的理解:
1、从资源组合的角度
进程把一组相关的资源组合起来,构成了一个资源平台(环境),包括地址空间(代码段、数据段)、打开的文件等各种资源。
2、从运行的角度
代码在这个资源平台上的一条执行流程(线程)。
三、线程的优缺点
线程就是进程减去共享资源。
1、优点:
- 一个进程中可以同时存在多个线程;
- 各个线程之间可以并发地执行;
- 各个线程之间可以共享地址空间和文件等资源;
2、缺点:
一个线程崩溃,会导致其所属进程的所有线程崩溃。
四、进程与线程的比较
- 进程是资源分配单位,线程是CPU调度单位;
- 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如上图的寄存器和栈;
- 线程同样具有就绪、阻塞、运行三种基本状态,同样具有状态之间的转换关系;
- 线程能减少并发执行的时间和空间开销;
----线程的创建时间比进程短;
----线程的终止时间比进程短;
----同一进程内的线程切换时间比进程短;
----同一进程的各线程间共享内存和文件资源,可直接进行不通过内核的通信;
五、线程的实现
主要有三种线程的实现方式:
- 用户线程:在用户空间实现(操作系统看不到的)
- 内核线程:在内核中实现(操作系统管理的)
- 轻量级进程:在内核中实现,支持用户线程
例如:Solaris
1、用户线程
在用户空间实现的线程机制,它不依赖于操作系统的内核,由一组用户级的线程库函数来完成线程的管理,包括线程的创建、终止、同步和调度等。
2、内核线程
是指在操作系统的内核当中实现的一种线程机制,由操作系统的内核来完成线程的创建、终止和管理。
3、轻量级进程
是内核支持的用户线程,一个进程可有一个或多个轻量级进程,每个量级进程由一个单独的内核线程来支持。(Solaris和Linux)
六、上下文切换
定义:停止当前运行进程(从运行状态改变为其他状态)并且调度其他进程(转变为运行状态)
- 必须在切换之前存储许多部分的进程上下文
- 必须能够在之后恢复他们,所以进程不能显示他曾经被暂停过
- 必须快速切换(上下文切换是非常频繁的)