Python协程简介

今天继续给大家介绍Python相关知识,本文主要内容是Python协程简介。

一、多进程和多线程出现的问题

为了提升计算机的执行效率,我们引入了进程的概念,这样可以使得计算机可以并发执行任务,当某个进程遇到I/O操作时,操作系统会自动将该进程挂起,运行其他进程,该进程会在执行完I/O操作后加入到就绪队列中,等待操作系统调度执行。然而,进程间的切换开销比较巨大,因此,我们又引入了线程的概念。一个进程内可以有多个线程,一个进程内的线程共享代码段、进程的共有数据,进程打开的文件描述符等等。相比于操作系统在进程间的调度,操作系统在线程之间的调度要消耗更少的资源,并且进程内部多个线程之间的通信要消耗更少的资源。
然而,线程之间的通信所需的资源消耗,在一些特定场景下还是无法满足我们的需求,我们迫切的需要一种消耗资源更少的程序并发执行(异步执行)方式。

二、协程简介

协程,又称为微线程、就是一种在单个线程内完成异步操作的方式。根据官方的解释,协程是在单个线程内实现用户态上下文切换的一种方式,所谓用户态,即相对于操作系统的内核态,是计算机操作系统的一种运行模式。与进程和线程不同,协程并不是计算机操作系统提供的一种程序运行方式,而是由程序开发人员认为创造的一种程序运行方式。协程的核心思想在于执行者对控制流的“主动让出”和“恢复”。相对于线程之间的“抢占式调度”而言,协程是一种“协作式”调度的方式。

三、Python与协程

Python对于协程的支持经历了多个版本。
1、Python2.X版本对于协程的支持非常有限,只能通过yield关键字支持的生成器不完全的实现了一部分协程的功能。
2、在引入gevent框架后,Python在协程上有了更好的实现方式。
3、在Python3.4中提供了asyncio模块。
4、在Python3.5中引入了async和await关键字。
5、在Python3.6中asyncio模块更加完善更加稳定。
可以看出,Python对于协程的支持会随着版本的变化而有着较大的差异,因此我们在编写协程相关异步执行代码时,要尤其考虑Python版本对协程的支持。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

猜你喜欢

转载自blog.csdn.net/weixin_40228200/article/details/128608229