Gevent

时间:2017-11-04 10:33:54   收藏:0   阅读:341

Gevent

特点:
	是一个基于libev的并发库 它为各种并发和网络相关的任务提供了整洁的API
	基于libev的高效时间循环
	基于greenlet的轻量级执行单元
	重用Python标准库API内容(比如Event Queues)
	socket谢童ssl
	利用线程池或者c-cares来执行DNS查询

a. 进程 线程 协程

进程:
    概念: 进程是正在运行程序的实例
    特点: 具有独立地址空间 是操作系统资源分配的基本单元
    进程上下文: 进程的物理实体与支持进程运行的物理环境,包括:地址空间 系统栈 打开文件表 。。。
    上下文切换: 由一个进程的上下文转到另一个进程的上下文
    系统开销: 运行操作系统程序完成系统管理工作所话费的时间和空间
    一个进程可以包括多个线程

线程:
	- 线程是程序执行的最小单位
	- 多线程的优点: 提高程序的并发性
协程:
	- 协程可以认为是一种用户态的线程,与系统提供的线程不同点是 他需要主动让出cpu时间,而不是由系统进行调度,即控制权在程序员手上。

优缺点:
	- 进程创建销毁成本高
	- 线程开销比进程低,但切换成本高,线程间同步变复杂。
	- 协程不陷入内核的情况进行上下文切换,没有同步问题,但需要手动切换。

下图解释:
    进程是有状态的 刚启动时就绪态,如果进程调度算法调度到这个进程 就会变成执行态。
    分配的算法是有时间片的 当时间片使用完 会继续切回就绪态
    如果时间片没有使用完 当有IO发生就会阻塞态 阻塞完成 继续切回用户态

技术分享

 

b. 阻塞 非阻塞

connect 阻塞做的操作
	客户端和服务端做交互的时候,客户端连接服务器,connect时候阻塞会自动打开,会向服务端发送一个序列号,服务端接受后处于阻塞。

技术分享

数据接受阻塞
	应用层recvfrom调用过程中会发生一个系统调用。系统调用会陷入内核里面。如果没有数据准备好,会等待数据直到数据准备好,内核得到数据把数据复制到用户空间,在返回。

技术分享

 

  

原文:http://www.cnblogs.com/oyoui/p/7781505.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!