什么是CPU,内存,硬盘?

  1. CPU:工人,干活的,判断以及逻辑处理
  2. 内存:车间,工人干活的地方,车间中加工原料,当车间中没有原料了,在从仓库中取原料,对原料进行加工 内存本身有一定的存储空间,对内存中的数据进行处理的速度比从硬盘取数据再处理的速度快很多
  3. 硬盘:仓库,原料,数据存储

    三者之间的关系

  4. CPU对数据进行判断以及逻辑处理,本身不能存储数据,这时cpu从内存取数据进行逻辑计算,如果内存没有数据,才会从硬盘读数据到内存,再对数据进行处理 就像人吃饭一样,cpu就是人,内存就是碗,硬盘就是饭锅!

当cpu进程等待,会造成内存开销的增加,内存不够用的时候会用到虚拟内存,导致虚拟内存的增加,这时磁盘IO开销就会增加,系统态sy%提升,cpu开销增加;内存里数据不够用,才用磁盘中取数据。

程序提速的方法

  • 单线程串行
  • 多线程并发
  • 多CPU运行
  • 多机器运行(hadoop,hive,spark)

    Python 对并发编程的支持

  1. 多线程
  • theading,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴的等待IO完成,多线程并发
  • CPU开始执行,遇到IO(读取内存,磁盘,网络)会切换到另一个task执行,IO完成会通知下一步的处理,电脑中的CPU和IO可以同时并行执行,
  1. 多进程
  • multiprocessing,利用多核CPU的能力,真正的并行执行任务,多进程并行,多个CPU多核IO并行执行
  1. 异步IO
  • asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行

注意:

  1. 使用lock对资源加锁,防止冲突访问
  2. 使用Queue实现不同线程或进程间的数据通信,实现生产者-消费者模式
  3. 使用线程池Pool和进程池Pool,简化线程和进程的提交、等待结束,获取结果
  4. 使用subprocess启动外部程序进程,并进行输入输出交互