python学习并发编程

一、并发编程理论基础

  • 并发编程得应用:
    • 网络应用:爬虫(直接应用并发编程)
    • 网络架构django、flask、tornado 源码-并发编程
    • socket server 源码-并发编程
  • 计算机操作系统发展史
    • 手工操作-读穿孔的纸带、用户独占全机、cpu等待手工操作、cpu利用不充分
    • 批处理-磁带存储(联机批处理{一边写入磁带,一边从磁带读出计算}、脱机批处理、只能运行一个程序,遇到IO就等待闲置
  • 多道程序系统
    • 同时执行多个任务,遇到io就切换,
    • 即空间隔离(多个程序运行),时空复用(IO切换)的特点
  • 分时系统
    • 同时执行多个任务,没有遇到IO也切换,固定时间片到了就切
    • 时间片轮转
    • 多路性、交互性、独立性、及时性
    • 切会浪费cpu时间,降低了cpu效率,但提高了用户体验。
  • 实时系统
    • 及时响应
    • 高可靠性
    • 时刻等待响应,即时处理
  • 通用操作系统:
    • 多道批处理
    • 分时
    • 实时
  • 操作系统分类:
    • 个人计算机操作系统
    • 网络操作系统
    • 分布式操作系统
  • 操作系统的作用:
    • 是一个协调、管理、和控制计算机硬件资源和软件资源的控制程序。【调度硬件资源、调用管理软件】
    • 隐藏了丑陋的硬件调用接口,提供良好的抽象接口
    • 管理、调度进程,并将多个进程对硬件的竞争变得有序
  • I/O操作:(相对内存来说得)
    • 输入【读到内存中】: input、f.read、accept、recv、connect
    • 输出【从内存读出】:print、f.write、send、connect
    • 文件操作/网络操作都是IO操作
  • 异步:两个任务同时运行(并行)
  • 同步:多个任务 串行 【按顺序执行】
  • 阻塞:等待 input、accept、recv
  • 非阻塞:不等待,直接执行
  • 并行:多个任务同时执行【多个CPU在同时执行任务】
  • 并发:只有一个CPU,交替执行多个任务【宏观上同时执行,实际是轮转】
  • 程序:没有运行
  • 进程:运行中得程序、计算机中最小得资源分配单元
  • 进程调度:
    • 多个进程(运行中得程序)在操作系统得控制下被CPU执行,去享用计算机资源
    • 先来先服务调度算法
    • 短作业优先
    • 时间片轮转
    • 多级反馈队列
    • 进程调度得过程是不能随意被程序影响得
  • 进程三大状态
    • 就绪 程序开始运行,进入就绪队列,等待cpu分配时间
    • 运行 执行进程,单个时间片内运行完成,就释放资源,没有左右完,就又自动切换到就绪队列等待下次得调度
    • 阻塞 执行中得进程遇到事件入IO等导致无法执行,进入阻塞状态,解除后进入就绪队列等待进程调度
  • 进程与父进程
    • 进程 PID
    • 父进程 PPID 负责回收一些子进程得资源后才关闭

二、python中的并发编程

  • 包:multiprocessing
    • 是python中操作、管理进程
    • 创建进程、进程同步、进程池、进程之间数据共享
    • python中的进程创建
      • 对Windows来说创建子进程,是将主进程内存空间中的所有变量import子进程内存空间中,(import就会执行文件代码)
      • windows平台创建子进程必须放在 if __name__ == '__main__' 下执行(不然就会循环创建子进程导致系统崩溃)
      • 对Linux来说创建子进程,就是将主进程内存空间中所有复制过去,复制不会执行内存空间中的代码
      • Linux平台就无所谓了,反正只是复制
    • 创建进程:
    • multiprocess.Process模块
    • Process() 由该类实例化得到得对象,表示一个子进程中得任务(尚未启动)
    • p = Process(group,target= func,agrs=('name',),kwargs={},name=)
      • group 值默认始终为None
      • target 表示调用对象
      • args 调用对象得位置参数 元组!!!
      • kwargs 调用对象得字典
      • name为子进程得名称
      • 注:必须用关键字方式指定参数、位置参数必须是元组格式,那怕是一个参数也要写成(n,)
    • 方法:
      • p.start() : 启动进程,调用操作系统的命令,传达要创建进程的申请,并调用子进程中的p.run()方法
      • p.run(): 进程启动时运行的方法,其是真正去调用target指定的函数,自定义类,就需要自己定义run方法
      • p.terminate(): 强制终止进程p
      • p.is_alive(): 查看进程状态值,True表示运行中
      • p.join(): 主线程等待子进程p运行结束后才运行 阻塞
    • 实操:

猜你喜欢

转载自www.cnblogs.com/sunxiuwen/p/9360946.html
今日推荐