Loading... # [进程、线程、进程池、进程三态、同步、异步、并发、并行、串行](https://www.cnblogs.com/songhaixing/p/13799827.html) ## 一.进程, 线程 ### 1.🌵进程 #### 🍹什么是进程? 开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程。 明白点: **当我们运行一个程序,那么我们将运行的程序叫进程。** #### 👉精简重点👈 > 进程是申请一块内存空间,将数据放到内存空间中去, 是申请数据的过程 > 是最小的资源管理单元 - 进程是线程的容器 #### 🍹程序与进程的区别 - 程序是数据和指令的集合, 是一个静态的概念, 就是一堆代码, **可以长时间的保存在系统中** - 进程是程序运行的过程, 是一个动态的概念, 进程存在着生命周期, 也就是说进程会随着程序的终止而销毁, **不会永久存在系统中** #### 🍹进程之间交互 - 进程之间通过 **TCP/IP** 端口实现 ### 2.🌵线程 #### 🍹什么是线程 - **线程是操作系统能够进行运算调度的最小单位。** - **它被包含在进程之中,是进程中的实际运作单位。** - **一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。** #### 👉精简重点👈 > 是进程的一条流水线, 只用来执行程序,而不涉及到申请资源, 是程序的实际执行者 > 最小的执行单元 #### 🍹线程之间交互 多个线程 **共享同一块内存** ,通过共享的内存空间来进行交互 ### 3.🌵进程与线程的关系 #### 🍹例子 我们打开一个聊天软件,这就是开启了一个进程 当我们在软件里面打开一些功能,比如空间, 扫一扫, 设置...,这些操作就是线程 所以可以说 **"进程" 包含 "线程", "线程" 是 "进程" 的子集** #### 🍹进程是线程的容器 工厂流水线例子 ![lm6c2zi3.png](http://flt-pan.58heshihu.com/blog/typecho/lm6c2zi3.png) ![lm6c3463.png](http://flt-pan.58heshihu.com/blog/typecho/lm6c3463.png) ### 4.🌵总结 - 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程; **进程——资源分配的最小单位。** - 线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。 **线程——程序执行的最小单位。** - 进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了. - 一个程序至少有一个进程,一个进程至少有一个线程. - 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行. ## 二.并行, 并发, 串行 ### 并发: 多个任务看起来是同时进行, 这是一种假并行 > **单核下使用多道技术实现** ![并发: 多个任务看起来是同时进行, 这是一种假并行](http://flt-pan.58heshihu.com/blog/typecho/lm6c78hw.png) ### 并行: 多个任务同时进行 > **并行必须有多核才能实现,否则只能实现并发(伪并行)** ![并行: 多个任务同时进行](http://flt-pan.58heshihu.com/blog/typecho/lm6c96wj.png) ### 串行: 一个程序完完整整的运行完,再运行下一个进程 ![串行: 一个程序完完整整的运行完,再运行下一个进程](http://flt-pan.58heshihu.com/blog/typecho/lm6c9y0c.png) ## 三.任务运行的三种状态 > 进程在运行的过程中不断地改变其运行状态 > **通常一个运行的进程必须具有三种状态:就绪态, 运行态, 阻塞态** ### 1.就绪态 (Ready) - **当进程已分配到除CPU以外的所有必要的资源后,只要再获得CPU, 便可执行程序, 进程这时的状态就称为就绪态,** - **在一个系统中处于就绪态的进程可能有多个** , 通常将他们排成一个队列, 这就叫 **就绪队列** ### 2.运行态 (Running) - **当进程已经获得CPU操作权限, 其程序正在运行, 着就叫做运行态** - **在单核操作系统中, 只有一个进程处于运行态** , 多核操作系统有多个进程处于运行态 ### 3.阻塞态 (Blocked)(sleep) - **正在执行的进程, 由于等待某个事件而无法执行时, 便被操作系统剥夺了cpu的操作时间, 这是就是阻塞态** - 引起阻塞的 **原因** 多种, 例如: **等待I/O操作, 更高优先级的任务抢走了CPU权限等.** ### 4.进程三种状态 间的转换 > **一个进程在运行期间, 会不断地在一种状态切换到另一只种状态** > 他可以是多次处于就绪态和运行态, 也可以多次处于阻塞态, 下图是三种状态的转换图 ![进程三种状态 间的转换](http://flt-pan.58heshihu.com/blog/typecho/lm6cdyud.png) #### 就绪态➠➠运行态 > 处于就绪态的进程, 当进程调度程序为之分配了CPU的时间片后, 该进程就会由就绪态转变成运行态 #### 运行态➠➠就绪态 > 处于运行态的进程在运行过程中, 因为分配的时间片用完了, 于是失去了CPU的使用权限, 运行态就会重新转为就绪态 #### 运行态➠➠阻塞态 > 正在运行的进程由于遇到I/O操作或被更高优先级的任务抢走CPU使用权限而无法继续执行, 便从运行态转为阻塞态 #### 阻塞态➠➠就绪态 > 处于阻塞态的进程, 若其等待的事情已经处理完毕, 于是进程从阻塞态转为就绪态 ## 四.任务提交的两种方式 ### 1.同步 - **同步是指发送方发送数据后, 等接收方发回响应后才发下一个数据报的通讯方式** - 同步是指 **两个程序的运行是相关的** , 其中一个线程在阻塞需要等待状态, 那另一个线程才运行 ### 2.异步 - **异步是指发送方发出数据后, 不等接收方发回响应, 接着就发下个数据报的通讯方式** - 异步是指 **两个线程毫无相关** , 自己运行自己的 ### 3.例子 #### 同步 1. 你叫我去吃饭, 我听到了就立即和你去吃饭, 如果没有听到, 你就不停的叫, 直到我告诉你听到了, 才一起去吃饭 2. 打电话好比同步, 两边是同时进行不能再打给另一个人 #### 异步 1. 你叫我去吃饭, 然后自己去吃饭了, 我得到消息后可能立即走, 也可能过会儿走 2. 发消息好比异步, 和一个人发完消息就可能和另一个人发消息 ## 五.进程池 ### 1.什么是进程池? - 👉 **进程池是资源进程, 管理进程组成的技术的应用.** ### 2.为什么要有进程池? **忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。** **那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?** 首先,创建进程需要消耗时间,销毁进程也需要消耗时间。 第二即便开启了成千上万的进程,操作系统也不能让他们同时执行,这样反而会影响程序的效率。 因此我们不能无限制的根据任务去开启或者结束进程。那么我们要怎么做呢? ### 3.进程池的概念 **定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务** 等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务 如果有很多任务需要执行,池中的进程数量不够,任务就要等待之前的进程执行任务完毕归来,拿到空闲进程才能继续执行。 **重点来了** ,也就是说, **进池中进程的数量是固定的,那么同一时间最多有固定数量的进程在运行** 这样不会增加操作系统的调度难度,还节省了开关进程的时间,也一定程度上能够实现 **并发** 效果。 ### 4.资源进程 - **预先创建好的空闲进程** ,管理进程(好比池子🏊)会把工作分发到空闲进程来处理。 ### 5.管理进程🏊 - 管理进程 **负责创建资源进程,把工作交给空闲资源进程处理,回收已经处理完工作的资源进程。** - **资源进程与管理进程的交互** > 管理进程如何有效的管理资源进程,分配任务给资源进程? > **通过IPC,信号,信号量,消息队列,管道等进行交互。** 最后修改:2023 年 09 月 08 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏