标签:资源分配 隔离 python多线程 switch 影响 event 代码块 非阻塞 请求
首先我们来说一下进程、线程还有协程它们三个的区别?
进程作为操作系统资源分配的最小单位,可以在进程和进程之间进行数据隔离,如果有特殊需要通过Manager进行进程间的数据共享,而线程才是执行程序,与CPU进行交互的最小单位,一个CPU同时只能与一个线程进行交互,所以CPU个数与线程数相等才能发挥多线程最大的优势,但是遗憾的时Python中以为有GIL锁的存在,并不能这么做,GIL锁的存在限制了在同一时间一个进程中只能有一个线程与CPU进行交互,但是这并不影响Python多线程进行IO操作的效率,因为IO操作并不占用CPU,如果是计算密集型,Python就没有办法了,只能是用多进程来提升程序的效率了.再说协程,协程在真正意义上并不是真实存在的,通过gevent框架利来实现协程,主要是为了解决阻塞问题,可以发挥线程的最大效率,不必让线程发出请求后傻傻的等,原理是让对一个线程进行分片,在执行是遇到IO操作就直接调用另一个模块greenlet的switch方法来切换代码块.实现高效率的多线程,不只有gevent可以实现协程,还有Twisted,这两个的底层原理都是基于时间循环实现的异步非阻塞框架.
标签:资源分配 隔离 python多线程 switch 影响 event 代码块 非阻塞 请求
原文地址:https://www.cnblogs.com/lovezwfjc/p/9826058.html