前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1.协程的基础知识

1.协程的基础知识

原创
作者头像
jiagui
发布2024-07-08 11:05:00
870
发布2024-07-08 11:05:00
举报
文章被收录于专栏:Python协程Python协程
  • 协程是一种用户态的轻量级线程,协程的调度完全由用户控制。从技术的角度来说,“协程就是你可以暂停执行的函数”。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
  • 线程包含在进程里面,协程包含在线程里面。协程也是和进程、线程一样,可以实现多任务。协程的切换开销比线程更小,不需要保存和恢复线程的状态。最通俗易懂的说法就是,协程就是一个可以暂停、可以挂起的函数。
  • 在Python解释器3.4版本时候引进了协程的概念,它使用一种单线程单进程的方式实现并发。Python中的协程就是一个可以暂停执行的函数,类似于生成器yeild。这时候的协程是通过@asyncio.coroutine 和 yeild from 实现的。后来为了更好的区分开协程和生成器,在Python3.5版本的时候引入async 和 await 作为保留字,同时协程的调用也变得简单了许多。协程和线程的区别与联系
  1. 一个线程可以多个协程,一个进程也可以单独拥有多个协程。
  2. 线程进程都是同步机制,而协程则是异步。
  3. 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
  4. 线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
  5. 协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。
  6. 线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档