Python学习——25.并发编程

并发编程

  • 概述
    • 非并发
      • 程序由单个步骤序列构成
      • 包含独立子任务的程序执行性能低
    • 并发
      • 异步、高效
      • 分解子任务、简化流程与逻辑
    • 进程 process
      • 一个程序的执行实例
      • 每个进程有自己的地址空间、内存、数据栈及辅助数据
    • 线程 thread
      • 统一进程内,可被并行激活的控制流
      • 共享相同上下文(空间地址、数据结构)
      • 特点
        • 便于信息共享和通信
        • 线程访问顺序差异会导致结果不一致(竞争)
    • 全局解释器锁 GIL(Global Interpreter Lock)
      • Python代码由虚拟机(解释器主循环)控制
      • 主循环同时只能有一个控制线程执行
  • 多线程
    • _thread 模块
      • 特点
        • 没有控制进程结束机制
        • 只有一个同步原语(锁)
        • 功能少于threading模块
      • 开始线程
        .start_new_thread(function, args, **kwargs=None)
    • threading 模块
      • .Thread线程类
        • 构造
          • .Thread(target=目标函数, args=(参数元组))
          • 自定义Thread派生类,重写run方法逻辑
        • 启动线程
          .start()
        • 要求主线程等待
          .join()
      • 获取当前线程
        .current_thread()
      • 同步原语:锁 threading.Lock
        • 获得
          .acquire()
        • 释放
          .release()
        • 支持上下文操作
          with lock:
  • 队列
    • queue 模块
      • Queue
        • FIFO
        • 构造实例
          .Queue(maxsize=0)
        • 放入数据项
          .put(item, block=True, timeout=None)
        • 获取数据项
          .get(block=True, timeout=None)
        • 声明当前队列任务处理完毕
          .task_done()
        • 队列所有项处理完毕前阻塞
          .join()
      • LifoQueue
        • LIFO
      • PriorityQueue 优先队列
  • 多进程
    • multiprocessing模块
      充分运用多核、多CPU的计算能力,适用于计算密集型任务
  • concurrent.futures 模块
    • ThreadPoolExecutor
    • ProcessPoolExecutor

你可能感兴趣的:(Python)