python之进程,线程,协程简单理解

进程:资源单位,由操作系统控制调度。正在执行的一个程序或者过程,进程之间不共享资源,进程间通讯手段:管道,队列,信号量等。

线程:是cpu的最小执行单位,由操作系统控制调度。一个进程至少有一个线程,同一个进程里面的多个线程共享该进程的内存资源(此处会涉及到资源的抢夺),因此需要用到“锁”,来防止资源争抢而导致的死锁等问题,创建线程的开销远远小于创建进程的开销。

多线程究竟能不能提高性能呢?

如果总任务数量一致,从时间片轮转角度来看,如果忽略线程和进程的切换,任务执行的总时间是没有变化的,但是获得了任务的同步执行。如果加上保存状态切换时间,总的时间比顺序执行花费的时间还要长但是可以换取的效果是多任务执行。1代表执行时间,0代表就绪或者等待时间,每个任务12个时间片,总共36个,忽略切换和保存现场的时间都是需要36个时间片完成全部任务。

100  100  100  100  100  100  100  100  100  100  100  100  任务1

010  010  010  010  010  010  010  010  010  010  010  010  任务2

001  001  001  001  001  001  001  001  001  001  001  001  任务3

111  111  111  111 ****** 111  111  111  111******  111  111  111  111   3个任务总共还是36次的时间片轮转

所以看你这多线程是用来干什么了,

IO密集型切换确实可以省时间,任务1,2,3把所有需要cpu计算的都先给计算了,在剩下的时间里大家就可以等待io操作了。

计算密集型的,那如果你不需要多任务执行,或者只有单核没办法利用多核实现真正意义上的并行(并行是指真正的同一时间都在执行,并发:是通过快速切换到达同时执行的效果,实际上cpu只能在同一时间点处理一个任务),还不如不用多线程,使用多线程反而会增加切换和保存现场的时间

协程:实现单线程的并发,由用户自己通过程序来实现控制调度。修改共享数据不需要加锁,切换开销小,更加轻量级。缺点:本质是单线程下的并发,无法利用多核,可以考虑多进程+协程。

靡不有初,鲜克有终
原文地址:https://www.cnblogs.com/gtsnow/p/10771561.html