协程基础了解

目录

一.概念

协程是啥

协程和线程差异

二.协程介绍

三.Greenlet模块

四.Gevent模块


 

一.概念

之前我们学习了线程、进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位。按道理来说我们已经算是把cpu的利用率提高很多了。但是我们知道无论是创建多进程还是创建多线程来解决问题,都要消耗一定的时间来创建进程、创建线程、以及管理他们之间的切换。

随着我们对于效率的追求不断提高,基于单线程来实现并发又成为一个新的课题,即只用一个主
线程(很明显可利用的cpu只有一个)情况下实现并发。这样就可以节省创建线进程所消耗的时间。

为此我们需要先回顾下并发的本质:切换+保存状态
  cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),
一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长
在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态
  一:其中第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务都被
“同时”执行的效果,如果多个任务都是纯计算的,这种切换反而会降低效率。
  为此我们可以基于yield来验证。yield本身就是一种在单线程下可以保存任务运行状态的方法,我们来简单复习一下:

协程是啥

协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。
通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定

协程和线程差异

在实现多任务时, 线程切换从系统层面远不止保存和恢复 CPU上下文这么简单。 操作系统为了程序运行的高效性每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作。 所以线程的切换非常耗性能。但是协程的切换只是单纯的操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住。

并发的本质: 切换+保存状态

注释
#1 yiled可以保存状态,yield的状态保存与操作系统的保存线程状态很像,但是yield是代码级别控制的,更轻量级
#2 send可以把一个函数的结果传给另外一个函数,以此实现单线程内程序之间的切换
#串行执行

send和next()区别:
1. send和next()都是让生成器向下走一次
2. send可以给上一个yield的位置传递值, 不能给最后一个yield发送值. 在第一次执行生成器代码的时候不能使用send()

.生成器:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
协程是一种轻量级的线程,它可以在一个线程中实现多个任务的并发执行。协程的优势在于避免了线程切换的开销,同时也能够避免线程间的竞争和死锁问题。下面是针对协程初学者的浅入深的学习建议: 1. 了解基础概念 在开始学习协程之前,需要先了解一些基础概念,如线程、进程、同步、异步、阻塞、非阻塞等。这些概念是协程学习的基础,可以通过阅读相关的教材或者网络资源来学习。 2. 学习协程的语法 协程的语法相对于线程和进程来说比较简单,因此学习起来也比较容易。需要学习的语法包括如何创建协程、如何启动协程、如何使用协程间的通信等。 3. 练习实例 学习协程最好的方法是通过实践来掌握,可以通过编写一些简单的协程程序来进行实践。例如,可以编写一个简单的生产者消费者模型,或者一个简单的协程调度程序。 4. 学习协程Python中有多个协程库可供选择,如asyncio、gevent、greenlet等。可以通过学习这些库,了解协程的更高级别的应用。其中,asyncio是Python标准库中的协程库,可以通过官方文档来学习。 5. 学习协程的应用 协程在网络编程、并发编程等领域有着广泛的应用。可以通过学习一些协程的应用场景,如异步IO、Web应用开发等,来了解协程的实际应用。 总之,协程是一种非常有用的编程技术,可以提高程序的并发性能,适合处理大量IO密集型的任务。初学者可以通过以上的建议来学习协程,从浅入深地掌握协程基础知识和实践技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值