进程和线程
1. 基本介绍
1.1 进程
- 概念:进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。当我们执行一个.exe程序时就是开启了一个进程。
- 进程是操作系统分配资源的基本单位,一个进程拥有自己的堆、栈、虚存空间(页表)、文件描述符等信息。
关于进程的相关知识可以参考操作系统中的进程管理
1.2 线程
- 概念: 线程是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
- 线程是操作系统能够进行运算调度的基本单位。它包含在进程中,是进程中的实际运行单位。
- 引入线程的优点:
1. 易于调度。
2. 提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
3. 开销少。进程是资源的拥有者,在创建、撤销、切换时会有更大的开销,限制了并发的程度。
举个例子:将工厂比作一个进程,占有的土地等属于它用于的资源,其中的生产线比作一个线程,当我们新增生产线时花费的资源就小于新增工厂
4. 利于充分发挥多处理器的功能。通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。
2. 二者区别
- 本质区别:进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位。
- 资源开销:每个进程拥有自己的内存和资源,进程的切换会有较大的开销;而同一进程的线程共享内存和资源,所以线程之间切换的开销小。
- 包含关系:一个进程内有多个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
- 内存分配:同一进程的线程共享进程的地址空间、文件描述符表、资源,而进程之间的地址空间和资源是相互独立的。
- 影响关系:一个进程崩溃后,不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
- 执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序(进程)中,由应用程序提供多个线程执行控制,两者均可并发执行。
- 操作者不同:进程的操作者一般是操作系统,线程的操作者一般是编程人员。
- cpu利用率不同:进程上下文切换开销大,cpu利用率低于线程。