多进程、多线程和协程

简单理解一下这三个东西!

多进程:

一个程序加用到的资源称之为进程,它是操作系统分配资源的基本单位,每个进程都有一个GIL锁,它有自己独立的内存空间,资源消耗大。

多线程:

多线程并不是真正意义上的多任务,因为进程有GIL锁的存在,线程执行前要先获得GIL锁才可以执行,执行代码直到sleep或者python虚拟机将其挂起,释放GIL锁,线程进行锁竞争,切换线程,会消耗资源,并且由于GIL锁的存在,一个进程永远只有一个线程被执行,因为要获得GIL锁才可以执行。虽然是这样,并不是说多线程没用,像IO密集型代码(文件处理、网络爬虫等),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,造成不必要的时间浪费,如果开启了多线程,那么线程A在等待时,会切换到线程B,可以不浪费CPU的资源,从而提升程序执行的效率),如果对于CPU密集型多线程反而是鸡肋。

多核CPU可以开多进程充分利用CPU的效率,每个进程再开多线程,节约IO等待时间。

协程:

依赖于线程存在的,利用线程在等待某个资源的时候去执行其他的函数,像多线程实现的下载器,一边在下载文件一边在保存文件,此时线程就卡在下载这,这时候就可以利用协程,你在等待的时间,我去执行别的函数,协程一般用gevent模块。

你可能感兴趣的:(多进程、多线程和协程)