20.并发编程
Posted yellowcloud
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20.并发编程相关的知识,希望对你有一定的参考价值。
目录
并发编程
1.并发编程
为什么要并发?
程序默认执行方式就是串行,即程序自上而下,一行一行顺序执行,必须把当前任务执行完才能执行下一个,这样造成效率低
并发可以同时执行多个任务 来提高程序的效率
2.如何实现并发:
? 1.多进程 核心原理是多道技术
? 2.多线程
? 3.协程
3.进程是什么
进程指得是正在运行的程序,是操作系统调度以及进行资源分配的基本单位 。
多进程指的是同一时间有多个程序被装入内存并执行
4.多道技术
多进程的核心原理是多道技术
1.空间复用
? 统一时间,加载多个任务到内存中,多个进程之间内存区域需要相互隔离,这种隔离是物理层面的隔离,其目的是为了保证数安全
2.时间复用
? 指的是,操作系统会在多个进程之间做切换执行
? 切换任务的两种情况
? 1.当一个进程遇到了IO操作 时会自动切换
? 2.当一个任务执行时间超过阈值会强制切换
? 注意:在切换前必须保存状态,以便后续恢复执行
简单的总结就是切换加保存
有了多道技术,计算机就可以同时并发的处理多个任务
5.并发重要概念
? 串行 程序自上而下顺序执行
? 并发 在不同任务之间快速切换
? 并行 真正的同时执行 必须具备多核CPU
以上三个概念都是用于描述处理任务的方式
? 阻塞 指的是程序遇到了IO操作,无法继续执行代码时的一种状态
? 非阻塞 指的是程序没有遇到IO操作的一中状态
? 是程序的状态
6.进程的三种状态
? 阻塞 运行 就绪
其中运行和就绪是非阻塞状态
7.进程的创建和销毁
对于通用计算机而言.必须具备创建和销毁进程的能力
创建
1.用户的交互式请求 ,鼠标双击
2.由一个正在运行的程序 调用了开启进程的接口 . 例如subprocess
3.一个批处理作业开始
4.系统初始化
销毁:
1.任务完成 自愿退出
2.强制结束 taskkill kill 非自愿
3.程序遇到了异常
4.严重错误 比如访问了不该访问的内存
8.进程和程序的区别
程序是 一堆代码放在一个文件中
进程是将代码从硬盘读取到内存然后执行产生的
进程是由程序产生的 ,一个程序可以产生多个进程
9.进程的层次结构
在linux中 进程具备父子关系,是一个树状结构 ,可以互相查找到对方
在windows 没有层级关系 , 父进程可以将子进程的句柄转让
10.PID 和 PPID
PID 是当前进程的编号,PPID 是父进程的编号
访问PID与PPID :
import os
os.getpid()
os.getppid()
11.python如何使用多进程
创建子进程的方式
1.导入multiprocessing中的Process类,实例化这个类指定要执行的任务 target
2.导入multiprocessing 中的Process类 继承这个类 覆盖run方法 将要执行的任务放入run中开启进程时会自动执行该函数
12.join函数
实例化子进程使用join函数会让主进程等待子进程执行完毕再继续执行
13.进程对象的常用属性
if __name__ == '__main__':
p = Process(target=task,name="老司机进程")
p.start()
p.join()
# print(p.name) #进程名
# p.daemon #守护进程
# p.join()
# print(p.exitcode) # 获取进程的退出码 就是exit()函数中传入的值
# print(p.is_alive()) # 查看进程是否存活
# print("zi",p.pid) # 获取进程id
# print(os.getpid())
# p.terminate() #终止进程 与strat 相同的是 不会立即终止,因为操作系统有很多事情要做
# print(p.is_alive())
14.僵尸进程与孤儿进程
孤儿进程 :当父进程已经结束 而子进程还在运行子进程就称为孤儿进程 ,有其存在的必要性,没有不良影响 。
僵尸进程 :当一个进程已经结束了但是,它仍然还有一些数据存在 ,此时称之为僵尸进程 。
以上是关于20.并发编程的主要内容,如果未能解决你的问题,请参考以下文章