相关文章推荐
骑白马的紫菜汤  ·  什么是协程?开发者社区·  3 月前    · 
严肃的橡皮擦  ·  朋友游戏漫画_116连载中_在线漫画_漫画人·  2 年前    · 
小百科  ›  什么是协程?开发者社区
协程 线程 线程阻塞 协程
骑白马的紫菜汤
3 月前
zy010101

什么是协程?

腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
发布
zy010101
社区首页 > 专栏 > 什么是协程?

什么是协程?

作者头像
zy010101
发布 于 2021-12-10 09:16:51
发布 于 2021-12-10 09:16:51
11.5K 0
举报
文章被收录于专栏: 程序员 程序员

协程

协程(Coroutines)是一种比线程更加轻量级的存在。协程完全由程序所控制(在用户态执行),带来的好处是性能大幅度的提升。

一个操作系统中可以有多个进程;一个进程可以有多个线程;同理,一个线程可以有多个协程。

协程是一个特殊的函数,这个函数可以在某个地方挂起,并且可以重新在挂起处继续运行。

一个线程内的多个协程的运行是串行的,这点和多进程(多线程)在多核CPU上执行时是不同的。 多进程(多线程)在多核CPU上是可以并行的。 当线程内的某一个协程运行时,其它协程必须挂起。

协程切换

由于协程切换是在线程内完成的,涉及到的资源比较少。不像内核级线程(进程)切换那样,上下文的内容比较多,切换代价较大。协程本身是非常轻巧的,可以简单理解为只是切换了寄存器和协程栈的内容。这样代价就非常小。

如果有不了解进程(线程)切换的,可以参考下面的资料:

深入理解Linux内核进程上下文切换

操作系统(四) – 用户级线程与核心级线程(线程的切换)

线程

协程切换的问题

实际上协程只有在等待IO的过程中才能重复利用线程,也就是说协程本质是通过多路复用来完成的。但是有个问题是,协程本身不是线程,只是一个特殊的函数,它不能被操作系统感知到(操作系统只能感知到进程和内核级线程),如果某个线程中的协程调用了阻塞IO,那么将会导致线程切换发生。因此只有协程是不够的,是无法解决问题的。还需要异步来配合协程。

因此,实际上我们可以把协程可以看做是一种用户级线程的实现。

协程+异步才能发挥出协程的最大作用

协程的使用

  • 计算型的操作,利用协程来回切换执行,没有任何意义,来回切换并保存状态 反倒会降低性能。
  • IO型的操作,利用协程在IO等待时间就去切换执行其他任务,当IO操作结束后再自动回调,那么就会大大节省资源并提供性能,从而实现异步编程(不等待任务结束就可以去执行其他代码)。

协程不是什么银弹,要注意使用场景。

本文参与 腾讯云自媒体同步曝光计划 ,分享自作者个人站点/博客。
原始发表:2021/12/08 , 如有侵权请联系 cloudcommunity@tencent.com 删除
编程算法

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!

编程算法
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
推荐阅读
目录
  • 协程
    • 协程切换
      • 协程切换的问题
    • 协程的使用
  • 社区

    • 技术文章
    • 技术问答
    • 技术沙龙
    • 技术视频
    • 学习中心
    • 技术百科
    • 技术专区
  • 活动

    • 自媒体同步曝光计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 圈层

    • 腾讯云最具价值专家
    • 腾讯云架构师技术同盟
    • 腾讯云创作之星
    • 腾讯云TDP
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接
    • MCP广场开源版权声明

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 大数据
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2026 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 粤公网安备44030502008569号

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2026 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
骑白马的紫菜汤  ·  什么是协程?开发者社区
3 月前
严肃的橡皮擦  ·  朋友游戏漫画_116连载中_在线漫画_漫画人
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号