zoukankan      html  css  js  c++  java
  • Python并发编程

    一、并发编程简介

    1、并发编程的目的就是为了提升程序运行速度

    2、程序提速的方法:单线程串行(不加改造的程序)-->多线程并发(threading)-->多进程并行(multiprocessing)-->多机器并行(hadoop/hive/spark)

    3、Python对并发编程的支持

    • 多线程:threading,利用CPU计算和IO读写可以同时执行的原理,让CPU不会干巴巴的等待IO完成,可以去做其他事
    • 多进程:multiprocessing,利用多核CPU和IO的能力,真正的并行执行任务
    • 异步IO(协程):asyncio,在单线程下利用CPU和IO可以同时执行的原理,实现函数异步执行
    • 使用Lock对资源加锁,防止冲突访问
    • 使用Queue实现不同线程/进程之间的数据通信,实现生产者-消费者模式
    • 使用线程池Pool、进程池Pool,简化线程、进程的任务提交、等待结束、获取结果
    • 使用subprocess启动外部程序,并进行输入输出交互

    二、多线程Thread、多进程Process、多协程Coroutine概述

    1、什么是CPU密集型计算、IO密集型计算?

    • CPU密集型:也叫计算密集型,是指IO在很短时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用相当高,如压缩和解压、加密和解密、正则表达式搜索
    • IO密集型:是指程序执行大部分时间是CPU在等待IO(硬盘、内存)的读写操作,CPU占用率较低,如文件处理程序、网爬虫资源下载、读写数据库程序

    2、多线程、多进程、多协程的对比?

      一个进程中可以启动N个线程、一个线程可以启动N个协程(异步IO)

    • 多进程multiprocessing.Process
      • 优点:可以利用多核CPU并行运算
      • 缺点:占用资源最多、受CPU限制可以启动数目比线程少
      • 适用于:CPU密集型计算
    • 多线程threading.Thread
      • 优点:相比进程,更轻量级、占用资源更少
      • 缺点:
        • 相比进程:多线程只能并发执行,不能利用多核CPU(GIL)
        • 相比协程:启动数目有限制,占用内存资源,有线程切换开销
      • 适用于:IO密集型计算、同时运行的任务数目要求不多
    • 多协程asyncio.Coroutine
      • 优点:内存开销最少、启动协程数量最多
      • 缺点:支持的库有限制(例如不能使用requests库,只能使用特定的aiohttp库)、代码实现复杂
      • 场景:IO密集型计算、需要超多任务运行、但有现成的库支持的场景

    3、怎样根据任务选择对应技术?

  • 相关阅读:
    子类构造函数中调用虚函数问题验证
    socks5代理浅识
    关于C++标准库(第2版)std::remove_if的"特性"概述
    动态获取结构体中指定的属性值
    构造和析构函数定义为私有场景
    remove_pointer使用测验
    广播自定义消息实现进程间的通信问题
    遍历窗口权限问题
    嵌入窗口到桌面的问题
    实验一 熟悉实验环境
  • 原文地址:https://www.cnblogs.com/lennie-luo/p/15183008.html
Copyright © 2011-2022 走看看