码迷,mamicode.com
首页 > 编程语言 > 详细

网络编程之线程,携程,进程的区别

时间:2018-10-21 19:33:53      阅读:773      评论:0      收藏:0      [点我收藏+]

标签:资源分配   隔离   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!