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