开发者社区> 问答> 正文

在并发编程中,协程是指什么?

在并发编程中,协程是指什么?

展开
收起
1358896759097293 2021-05-04 15:28:38 964 0
1 条回答
写回答
取消 提交回答
  • 45271990@qq.com

    其实最早在操作系统里没有协程的概念,大家都是通过协程做逻辑上抽象来帮助我们写并发代码。 15.png

    比如说这里有两段code,一段是解压的code,一段是 parser的code。大家要从解压数据结构里面去解析数据,这里对数据进行简单的encode,如果char是普通字符,会直接返回。若是特殊字符,可能就进行一个长度encode。用协程来组织逻辑,emit() 和 parser::getchar()会切换到另一个协程,如果没有协程需要两个线程结合pipe来组织,但如果有协程,我们可以在 frame里面直接控制,逻辑清晰且性能高。 我们看怎么实现协程。协程的执行上下文其实包括这几个部分,当前的站、局部变量、当前代码位置,这些其实都可以通过数据表示。 16.png

    与OS内的线程切换方式一致

    (1) 保存pc (2) 保存sp (3) 保存callee-save寄存器

    保存完这些后,将来想回去,只要通过反向计算器pop出来,就会回到之前上下文。协程场景下,emit和 getchar都是通过这种方式去实现的。

    2021-05-05 22:56:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Swoole2.0原生协程高性能开发实践 立即下载
fibjs 模块重构从回调到协程 立即下载
fibjs 模块重构从回调到协程--陈垒 立即下载