协程到底有什么用

协程,又称微线程,纤程,协程是一种用户态的轻量级线程。线程的切换会保存到CPU的栈里,协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。

协程到底有什么用

一、协程的定义

协程,又称微线程,纤程,协程是一种用户态的轻量级线程。

线程的切换会保存到CPU的栈里,协程拥有自己的寄存器上下文和栈,

协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈

协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态

协程最主要的作用是在单线程的条件下实现并发的效果,但实际上还是串行的

二、协程和线程差异

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

三、协程的问题

但是协程有一个问题,就是系统并不感知,所以操作系统不会帮你做切换。那么谁来帮你做切换?让需要执行的协程更多的获得CPU时间才是问题的关键。


延伸阅读

协程的好处

在IO密集型的程序中由于IO操作远远小于CPU的操作,所以往往需要CPU去等IO操作。同步IO下系统需要切换线程,让操作系统可以再IO过程中执行其他的东西。这样虽然代码是符合人类的思维习惯但是由于大量的线程切换带来了大量的性能的浪费,尤其是IO密集型的程序。

所以人们发明了异步IO。就是当数据到达的时候触发我的回调。来减少线程切换带来性能损失。但是这样的坏处也是很大的,主要的坏处就是操作被 “分片” 了,代码写的不是 “一气呵成” 这种。 而是每次来段数据就要判断 数据够不够处理哇,够处理就处理吧,不够处理就在等等吧。这样代码的可读性很低,其实也不符合人类的习惯。

但是协程可以很好解决这个问题。比如 把一个IO操作 写成一个协程。当触发IO操作的时候就自动让出CPU给其他协程。要知道协程的切换很轻的。协程通过这种对异步IO的封装 既保留了性能也保证了代码的 容易编写和可读性。在高IO密集型的程序下很好。但是高CPU密集型的程序下没啥好处。

文章标题:协程到底有什么用,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/62290

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
E.ZE.Z认证作者
上一篇 2023年7月28日 下午10:36
下一篇 2023年7月28日 下午10:45

相关推荐

  • 纺织要用到什么软件编程

    纺织行业中常用的软件编程工具包括1、计算机辅助设计(CAD)软件、2、计算机辅助制造(CAM)软件、3、产品生命周期管理(PLM)软件。其中,CAD软件的重要性不言而喻,该工具允许设计师在制作样品前对纺织品进行详细设计和修改,极大节省了传统手绘工艺的时间与资源。CAD软件的使用不仅提高了设计效率,还…

    2024年4月27日
    1500
  • 面试编程考察什么

    面试中的编程环节主要考察1、算法逻辑能力、2、编程语言熟练度、3、问题解决能力和4、代码优化意识。其中,算法逻辑能力尤为重要。它指的是应聘者分析问题、设计解决方案的能力,以及在实现这些方案时如何逻辑清晰、条理化地组织代码。具备良好的算法逻辑能力,不仅能有效解决复杂问题,还能在面临新问题时,快速思考并…

    2024年4月27日
    900
  • 数控编程循环代码是什么

    数控编程循环代码主要涉及到CNC机器的自动化操作中,用于控制机器实施重复的加工过程。在这些编程语言中,循环代码对于实现高效、精确的生产至关重要。1、它极大地提高了生产效率,通过减少人为干预,加快了加工速度。在详细描述中,提高生产效率体现在两个方面:首先,通过预设的循环程序,机器可以不间断地进行同一操…

    2024年4月27日
    900
  • 编程为什么要使用函数表示

    编程使用函数的主要原因有:1、提高代码复用率、2、简化复杂问题、3、代码模块化、4、便于维护和调试、5、易于协作开发。其中,简化复杂问题可以被视为函数的核心功能。通过分解问题为独立的功能模块,函数有助于程序员理解并解决复杂的编程任务。例如,一个复杂的操作可以被拆分为几个步骤,每个步骤由一个函数执行,…

    2024年4月27日
    600
  • 如何实践okr|OKR

    OKR(Objectives and Key Results)是一种流行的管理策略和目标设定框架,它帮助组织聚焦于公司最重要的目标上。运用OKR包括:1、设定清晰、可衡量的目标;2、定义关键结果来跟踪目标的实现情况;3、持续监测和评估;4、透明共享以增强团队协作;5、灵活调整以应对变化。 要第一点—…

    2024年1月17日
    20600
  • 程序员编程有什么意义

    在当今的数字化时代,程序员编程的意义在于创造创新的解决方案、推动技术发展以及将复杂系统简化。例如,程序员通过编写代码能够创建软件应用程序,这些应用程序可以优化业务流程、增强数据分析的能力,以及改善用户体验。 编程不仅是一项技术活动,它还涉及到解决问题、设计模式和逻辑思维。通过编写高效的代码,程序员可…

    2024年4月27日
    900
  • Eto70用什么编程环境

    Eto70的编程环境通常包含1、集成开发环境(IDE),2、版本控制系统,3、依赖管理工具,以及4、构建和部署工具。在这些环境中,集成开发环境无疑是最为核心的组件,因为它为开发者提供了一个功能全面且统一的开发平台。 集成开发环境(IDE) 是开发者编写和测试代码不可或缺的工具。它通常提供代码编辑器、…

    2024年4月27日
    600
  • 编程里ping是什么意思

    Ping 在编程中是一个网络工具,用来测试数据包是否能从一个网络组件发送到另一个网络组件并返回。通常,它表示网络连接的质量和速度。 通过Ping命令,我们可以测量从发送者到目标主机之间的往返时间(RTT)。详细来说,它发送一个ICMP(Internet Control Message Protoco…

    2024年4月27日
    600
  • 机器人编程小船什么原理

    机器人编程小船主要基于两大原理:1、浮力原理,2、远程控制技术。 其中,浮力原理是确保小船能在水面上稳定航行的物理基础。简单来说,浮力原理涉及到小船设计时的物料选择和结构布局,这确保了小船在水面上能接受到向上的力,这个力大小等于小船排开水的重量。通过精心设计小船的尺寸和结构,可以达到小船与水的完美配…

    2024年4月27日
    900
  • 为什么说 C 语言是系统级编程的首选

    因为C语言足够简单且贴近硬件,但又有一定的抽象,使其便于人类理解和编写。C语言基本上可以完成汇编语言的所有功能,适合用于系统编写,而且比汇编语言更便于设计、调试和移植。同时,C语言又足够小巧,相比其他高级语言来说运行的开销更小。 C语言足够简单且贴近硬件,但又有一定的抽象,使其便于人类理解和编写。C…

    2023年2月22日
    59800

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部