Python协程Gevent模块详解:进程、线程、协程区分
34 浏览量
更新于2024-08-29
收藏 102KB PDF 举报
Python 之协程 Gevent 模块详解
协程(Coroutine)是一种轻量级的线程,即微线程。协程的出现是为了解决传统线程和进程的不足之处。那么什么是协程?协程是corporate routine的缩写,直接翻译为协同的例程,一般我们都简称为协程。在 Linux 系统中,线程就是轻量级的进程,而我们通常也把协程称为轻量级的线程即微线程。
进程、线程、协程的区分:
进程和协程有相同点和不同点。相同点在于,当我们挂起一个执行流的时,我们要保存的东西:栈,其实在你切换前你的局部变量,以及要函数的调用都需要保存,否则都无法恢复;寄存器状态,这其实用于当你的执行流恢复后要做什么。寄存器和栈的结合就可以理解为上下文,上下文切换的理解:CPU 看上去像是在并发的执行多个进程,这是通过处理器在进程之间切换来实现的,操作系统实现这种交错执行的机制称为上下文切换。
不同点是执行流的调度者不同,进程是内核调度,而协程是在用户态调度,也就是说进程的上下文是在内核态保存恢复的,而协程是在用户态保存恢复的,很显然用户态的代价更低。进程会被强占,而协程不会,也就是说协程如果不主动让出 CPU,那么其他的协程,就没有执行的机会。对内存的占用不同,实际上协程可以只需要 4K 的栈就足够了,而进程占用的内存要大的多。
线程和协程的比较:
既然我们上面也说了,协程也被称为微线程,下面对比一下协程和线程:线程之间需要上下文切换成本相对协程来说是比较高的,尤其在开启线程较多时,但协程的切换成本非常低。同样的线程的切换更多的是靠操作系统来控制,而协程的执行由我们自己控制。协程只是在单一的线程里不同的协程之间切换,其实和线程很像,线程是在一个进程下,不同的线程之间做切换,这也可能是协程称为微线程的原因吧。
Gevent 模块:
Gevent 是一种基于协程的 Python 网络库,它用到 Greenlet 提供的,封装了 libev。Gevent 模块提供了一个高效的异步 I/O 模型,可以轻松地编写高性能的网络服务器和客户端。Gevent 模块的主要特点是:
* 使用协程来实现异步 I/O
* 使用 Greenlet 提供的轻量级线程来实现协程
* 封装了 libev 库来提供高效的异步 I/O 模型
* 提供了一个简单易用的 API 来编写高性能的网络服务器和客户端
Gevent 模块提供了一个高效的异步 I/O 模型,可以轻松地编写高性能的网络服务器和客户端。
2022-03-20 上传
2022-03-20 上传
点击了解资源详情
2022-03-20 上传
2015-05-24 上传
229 浏览量
2018-12-30 上传
2019-08-10 上传
2018-08-09 上传
weixin_38608378
- 粉丝: 4
- 资源: 857
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明