协程的初步理解

本文介绍了协程(coroutine)和例程(routine)的概念,通过类比帮助理解它们之间的区别。协程可以在执行到一半时挂起并恢复,而例程执行完毕才会返回。将协程看作类,可以更好地保存其执行状态。文章还探讨了有栈协程和无栈协程的实现,有栈协程维护独立栈,可能面临空间浪费或爆栈问题,无栈协程则通过禁止在子例程/子协程中返回,减少空间需求,但实现较为复杂,通常需要编译器支持。
摘要由CSDN通过智能技术生成

协程的初步理解

这两天在网上看协程相关的知识,今天终于有了一个大概的理解。下面给出一个介绍:

协程(coroutine)和例程(routine)

在讨论协程时,往往把这个概念和例程做对比。例程就是我们通常意义下的函数。

例程和协程的区别在于:当调用者调用被调用者时,如果是例程,只有当被调用者执行完毕后才能返回调用者;如果是协程,被调用者可以执行到一半就挂起并返回到调用者,同时,被调用者可以再次从挂起的地方重新执行。

把协程和例程看作一个类

为了更好的理解协程和例程,基于面向对象的思想,我们把协程和例程都看作一个类。例如,一个例程可以是做一个类F(事实上,就像仿函数那样),每次执行函数可以理解为:

F f;
f.run();

也就是说,每次执行函数,都相当于定义一个类的实例并执行它。
基于我们上面讨论的区别,对于例程而言,只有当被调用者执行完毕后才能返回调用者。所以当f执行完成后就自动销毁了,不存在任何中间状态,f这个实例的状态不会影响执行结果。所以,对于例程而言,run()函数是一个静态成员函数,可以直接写作F::run()。但是对于协程而言,一个协程可以执行到一半就返回调用者,下次再继续执行,也就是说,可以:

<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值