文章目录
- 0. 前言
- 1. 进程
- 2. 进程控制块(PCB)
- 3. 线程
- 3.1 线程概念
- 3.2 为什么引入线程
- 4. 进程和线程区别与联系
0. 前言
要想了解多线程,那就绕不开进程,所以我们在学习多线程之前先简单了解一下进程。
1. 进程
进程是操作系统的基础,是一次程序的执行。进程包括线程(分为单线程,多线程),是系统进行资源分配和调度的一个基本单位,每个进程都有自己独立的内存空间和执行上下文。
例如:当我们打开自己电脑的“任务管理器”,我们会发现一个运行的程序,而这些运行的程序都是独立的进程,是动态的。
注意:只有程序运行时才是一个进程,不运行时只是一个可执行文件,是静态的。
2. 进程控制块(PCB)
PCB是一个结构体(可以说是一个低配的类,一般通过C/C++实现),里面记录了进程的各种属性,可以通过一系列数据结构来管理操作系统中的进程,对进程创建、终止、挂起、恢复等操作。
PCB是操作系统中的重要概念,它的设计和实现可以影响操作系统的性能和稳定性。
3. 线程
3.1 线程概念
线程是进程运行中一个小的执行单元,被称为轻量级进程。一个进程中至少有一个线程,这些线程可以并发执行,共享进程的资源。
例如:一个微信在运行的时候,是一个进程,而其中会包括许多线程(发送表情线程、传输文件线程、视频通话线程等),这些线程可以同时运行,从而执行对应功能。
3.2 为什么引入线程
我们可以把最原始的进程比作一个工厂,里面只能有一个生产线,这个时候没有引入线程,但我们仍可以把生产线比作成线程方便理解。
工厂在开工时,程序也在运行。
可是,当有一天工厂需要扩大规模,由于没有引入线程的概念,每个工厂只能有一条生产线,所以我们需要建立多个新工厂(多进程),需要选地址,花费人力建筑,完成后还需要花费更多的人力去管理,不同工厂在不同位置,当运输材料时,也需要花费人力时间。
而当我们引入线程的概念,那么工厂就不会局限于只能有一条生产线,我们可以在工厂内建立很多生产线(假设工厂足够大),省下很多空间,并且可能以前有些员工工作量较小,提现不出他们的价值,还可以增大员工的工作量,充分发挥每一人的潜力,使工厂更强大。(有点黑心老板的感觉,哈哈哈)
当然,多进程并不一无是处,我们前面是假设工厂足够大,当工厂不够大的时,还是需要多建立新的工厂,提高产量,并且员工分离,也减少了矛盾,拥有更多空间,如果发生火灾等危害,损耗也不会太大,所以多进程,多线程都会存在。
通过上面,也知道线程了的优点,下面在用书面语总结一下。
- 提高程序性能。多线程可以将计算密集型任务和I/O密集型任务分离,让系统的CPU资源得到更好的利用,可以加快程序的执行速度。
- 提高程序的响应速度。多线程可以将任务划分为多个较小的子任务并
行执行,从而减少任务的响应时间,提高系统的交互性和即时性。- 改进程序的结构。多线程可以让程序的不同部分并行执行,使得程序结构更加清晰、简单,便于维护和调试。
- 充分利用多核处理器的优势。随着计算机硬件的发展,多核处理器已经成为主流,多线程可以让程序在多个CPU核心上并发执行,充分利用多核处理器的特点,提高系统的性能。
4. 进程和线程区别与联系
进程和线程是操作系统中的两个核心概念,它们具有以下的区别和联系:
进程是资源分配的最小单位,而线程是CPU调度的最小单位。
进程具有独立的地址空间,而线程共享所属进程的地址空间。
进程之间相互独立,互不干扰,但线程之间共享进程的资源,因此线程之间会互相影响。
进程可作为独立的程序单元存在,而线程必须依赖于进程而存在。
进程拥有自己的一套堆栈空间和全局变量,而线程没有自己的堆栈,共享进程的堆栈空间和全局变量。
进程之间通信需要通过进程间通信机制来实现,而线程之间可以直接共享进程的内存,因此通信比较方便。
进程创建和销毁的开销比较大,因为需要为进程分配独立的资源和空间;而线程创建和销毁的开销较小,因为它们共享进程的资源和空间。
综上所述,进程和线程是相互依存、互相协作的概念,它们在系统运行中各有自己的作用和优势,应用需要根据需求和实际情况合理选择。