作为一个测试,时常会被RD一些各种名词,通常都只是一知半解(猜),傻傻分不清说这些名词到底是什么。
本期,我们一起来对日常工作中频繁出现关于多线程的名词,进行系统学习。
什么是进程?
记得以前上计算机基础的时候,知道了进程基本概念:
进程是资源分配的最小单位
浅理解就是:在操作系统中启动一个程序,就会开启一个进程。进程执行时,系统会对该进程分配执行空间。
一旦进程被创建,就是一次性执行过程,动态执行过程,存在就绪、运行和终止等7种状态
操作系统中会同时运行多个程序,也就是多个进程。每一个进程都会对其进行分配内存资源。
操作系统把可执行程序核心运行数据加载到内存中,并创建一个进程。
进程存在意义?
操作系统可以同时执行多个进程,实现并发编程效果,高效
进程之间的共享那些资源?
消息队列、共享内存、管道、信号和套接字
什么是线程?
线程的官方概念:
线程是CPU调度执行的最小单位
怎么理解上述最小单位?
- 线程实现并发执行进程中具体代码的机制
- 线程是被包含在进程中的,一个进程中至少包含1个线程
- 同一进程的不同线程间共享进程的资源
- 线程的状态也是动态,包含就绪、阻塞和运行状态
CPU怎么调度线程的?
- 一个核就是一个CPU,CPU通过时间片轮转来获取线程机器指令
- CPU调度方式有两种:分时调度和抢占式调度
- 分时调度是让所有的线程轮流获得CPU的使用权,并平均分配每个线程占的CPU时间片
-
抢占调度是优先让运行池中优先级高级的线程占有CPU
同一个进程的不同线程之间可以共享那些资源?
- 堆,进程启动的时候开辟出来的空间
- 全局变量,全局变量不受具体的函数和不受具体线程拥有,全局变量是共享资源
- 静态变量,在内存中存放在静态存储区,与全局变量是同等的
- 文件资源,文件资源由系统管理,多线程之间的共享
-
进程代码段、进程的公有数据、进程打开文件描述符、信号的处理器、进程的当前目录
注意
-
栈:每个线程之间都有自己独立的空间,每个线程不共享
进程与线程的区别?
- 进程包含线程,进程是资源分配的最小单位,线程是CPU调度的最小单位
-
进程与进程之间不共享资源,创建和销毁速度比线程更慢
任务执行三种状态
在操作系统中,启动一个进程,从进程创建开始就会不停地改变其运行状态。
通过一个运行的进程有三种状态:就绪态、运行态和阻塞态
-
就绪态:
- 当进程获取除了CPU外其他必要的资源,只要CPU便可以执行程序,此时进程状态称为就绪状态
- 在一个系统中处于就绪状态的进程可能有多个,会组成一个队列,称之为就绪队列
-
运行态:
- 当进程已经获取CPU操作权限,其程序正在运行,此时状态就是运行状态
-
阻塞态:
- 当CPU正在执行其他进程,进程处于等待阶段叫做阻塞
- 引起阻塞原因有I/O操作、高优先级抢走CPU权限等
-
就绪态->运行态
- 进入队列中等待的进程获取到CPU时间片权限后,进程就进入到运行态
-
运行态->就绪态
- 当运行态的进程把分配的时间片用完了,失去了CPU使用权权限,进程的状态从运行态到就绪态
-
运行态->阻塞态
- 当运行的进程遇到I/O操作或者优先高的任务抢走CPU使用权限而无法继续执行时,进程的状态从运行态转为阻塞态
-
阻塞态->就绪态
-
当CPU处理完优先级高的任务后,阻塞的进程就会转换为就绪态
-
任务提交的两种方式
-
同步
- 同步是指发送方法发送数据后,必须要等待接收方法返回响应后才能发送下一个数据
- 同步是两个程序运行是相互关联的,其中一个处于阻塞等待状态,另外一个程序才能运行
-
异步
-
异步是指发送方发出数据后,不等待接收方发回响应,接着就发下一个数据
-
异步是两个线程毫无相关,可以各自运行
-
进程池
进程池是资源进程,管理进程组成的技术的应用
进程池特点
- 节省手动创建大量的进程,手动创建大量进程,会花费大量的时间
- 对大量执行完的进程进行及时销毁,避免造成大量资源
-
在python中提供了pool去创建进程池
进程池执行过程
- 进程池中可以指定最大的进程数
- 当进程池中没有满时,如果有新的请求到pool,进程池会自动创建一个新请求到池中,
- 当进程池进程数满时,新的请求会等待,直到池中的进程有结束的,才会创建新的进程来执行
- 进程池实现了上下文管理协议,可以通过with来管理进程池
总结
操作系统相关的知识在学校没有好好学习,现在重新温故知新。进程、线程在工作中遇到不会再迷糊啦。
以上是本期内容,欢迎大佬们点赞评论,下期见~~
本文正在参加 「金石计划 . 瓜分6万现金大奖」