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

  • CPU密集型
    • 也叫计算密集型,是指IO在很短的时间内可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高
    • 例如 压缩解压缩,加密解密,正则表达式搜索
    • 只在CPU中计算
  • IO密集型

    • 指系统运作的大部分状况是CPU在等IO(硬盘、内存)的读写操作,CPU利用率仍然很低
    • 例如文件处理程序,网络爬虫程序,读写数据库程序
    • 程序依赖大量的外部数据源,比如内存,磁盘和网络,那么它就是IO密集型

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

  • 联系

    • 一个进程可以启动多个线程,一个线程可以启动多个协程
  • 多线程
    • 优点
      • 相比进程,更轻量级,占用资源(每一个线程的运行都要包含自己的一些变量的存储,存储到内存区域,这是线程本身要消耗内存的)少
    • 缺点
      • 相比进程,多线程只能并发(CPU和IO可以并行执行)运行,不能利用多CPU(GIL 全局解释器锁)
      • 相比协程,启动数目有限制,占用内存资源,有线程切换开销(一个线程可以启动很多协程,很多协程只使用了单个线程本身的资源,这个时候一个程序中可以启动大量的协程,本身占用资源比较少,)
    • 适用
      • IO密集型,同时运行的任务数目要求不多
  • 多进程
    • 优点
      • 可以使用多核CPU并行运算
    • 缺点
      • 相比线程,占用资源多,启动数目少
    • 适用
      • CPU密集型
  • 多协程
    • 优点
      • 内存开销最少,启动协程数量最多
    • 缺点
      • 支持的库有限制(aiohttp vs requests),代码实现复杂
    • 适用
      • IO密集型,需要超多任务运行,但有现成库支持的场景

        3.怎么根据任务选择对应技术?

        image.png