一、协程的概念
1、协程是单线程下的并发,它是程序员级别的,我们来控制如何切换。
2、进程的开销 >>>>>> 线程的开销 >>>>>> 协程的开销
3、协程的使用需要借助于第三方模块 gevent 模块或者 asyncio 模块
4、gevent 和 asyncio 是两个在 Python 中常用的协程框架,它们都提供了在异步编程中使用协程的能力。
gevent 是一个基于协程的并发库,它通过 monkey-patching 的方式将标准库中的阻塞式 I/O 操作变为非阻塞的,从而实现协程的调度和并发处理。gevent 提供了自己的协程对象 Greenlet,使用 gevent.spawn() 来创建和管理协程。gevent 还提供了事件循环机
制,允许在协程之间进行切换和调度。它适用于需要高性能网络编程的场景,如服务器开发。
asyncio 是 Python 官方引入的异步编程框架,从 Python 3.4 版本开始引入,并在 Python 3.5 版本引入了 async 和 await 关键字。asyncio 基于事件循环(event loop)的概念,使用协程来实现异步编程。它提供了异步 I/O 操作、定时器、任务调度等功能,并且有丰富
的标准库和第三方库支持。asyncio 适用于编写高效的异步代码,特别是在 Web 开发、网络爬虫等场景下。
下面是一些比较 gevent 和 asyncio 的特点:
-
生态系统和库支持:
asyncio有着更广泛的生态系统和库支持,包括官方标准库和第三方库,可以方便地与其他异步框架集成。gevent虽然也有一些扩展库,但相对较少。 -
编程模型和语法:
gevent使用了更传统的基于线程和阻塞 I/O 的编程模型,通过 monkey-patching 来实现协程。而asyncio使用了更现代的基于事件循环和异步 I/O 的编程模型,通过async和await关键字来定义协程。 -
性能和吞吐量: 由于
gevent使用了更轻量级的协程对象和调度机制,并且对阻塞 I/O 进行了优化,因此在某些特定的场景下,它可能会比asyncio更高效和具有更高的吞吐量。
综上所述,选择使用 gevent 还是 asyncio 取决于具体的需求和场景。如果你需要高性能的网络编程和并发处理,可以选择使用 gevent。而如果你需要一个官方支持、成熟且广泛应用的异步编程框架,并且需要与其他库和框架无缝集成,那么选择 asyncio 是一个不错的选择。
二、gevent的使用
1、服务端
2、客户端