协程, 是 为了 避免 闭包传递变量 的 性能损耗 而产生  。

如果不是 为了 避免 闭包传递变量 的 性能损耗 ,    线程池 和 Task 已经够了,  不需要 再设计 出 协程 来  。

闭包, 会 让 所有共享 的 变量 变成 引用 访问 的 方式,包括 值变量  。

因为 闭包 是将 变量 放到 堆 里 共享  。

协程 就是在 堆 里  模拟出一个   堆栈 和 协程“上下文”  存储区,  这和 操作系统 的 线程 堆栈 和 上下文 架构 是 相似  的  。

上下文存储区 保存 每个 协程 的  堆栈 的 栈顶 栈底,   在 切换 协程 时,  将 栈顶 栈底 存入 CPU 寄存器,

这样,  代码 中 对 变量 的 访问 就可以 和 线程 一样,  通过 编译在 指令中 的 偏移量 操作数 加上 栈底  的 地址 就可以得到 变量 的 地址  。

这样 对  函数  局部变量 的 访问 就和 线程 一样 ,  指令 偏移量 操作数 +  栈底 ,    这样 一次 寻址  。

避免了   闭包     将 变量 变成 引用访问 的 二次寻址 带来 的 性能损耗   。

所以,  C#   的    async  await      本身 就 包含了 一个 协程 的 实现,    这大概也是  C#  async  await     要通过 编译器  把 代码 编译为 状态机 而不是      Task.ContinueWith()    的  原因   。

协程 需要  编译器 在 汇编 层面  实现,   不能 通过 高级语言 的 类库 / 封装 / 设计模式   的  方式实现  。

InnerC   还不能 描述 协程,    可以考虑 给 InnerC 增加    协程   的 语法支持  。

在 现阶段,    协程 是一个 有 技术含量 和 竞争力 的 技术  。

协程 和 async await的更多相关文章

  1. Python PEP 492 中文翻译——协程与async/await语法

    原文标题:PEP 0492 -- Coroutines with async and await syntax 原文链接:https://www.python.org/dev/peps/pep-049 ...

  2. Python的异步编程[0] -> 协程[0] -> 协程和 async / await

    协程 / Coroutine 目录 生产者消费者模型 从生成器到异步协程– async/await 协程是在一个线程执行过程中可以在一个子程序的预定或者随机位置中断,然后转而执行别的子程序,在适当的时 ...

  3. 深入理解协程(三):async/await实现异步协程

    原创不易,转载请联系作者 深入理解协程分为三部分进行讲解: 协程的引入 yield from实现异步协程 async/await实现异步协程 本篇为深入理解协程系列文章的最后一篇. 从本篇你将了解到: ...

  4. async 异步协程进阶

    协程通过 async/await 语法进行声明,是编写异步应用的推荐方式 例如新定义一个协程(coroutine object): async def foo(): return 42 首先先来介绍下 ...

  5. [转载] Python协程从零开始到放弃

    Python协程从零开始到放弃 Web安全 作者:美丽联合安全MLSRC   2017-10-09  3,973   Author: lightless@Meili-inc Date: 2017100 ...

  6. Python的异步编程[0] -> 协程[1] -> 使用协程建立自己的异步非阻塞模型

    使用协程建立自己的异步非阻塞模型 接下来例子中,将使用纯粹的Python编码搭建一个异步模型,相当于自己构建的一个asyncio模块,这也许能对asyncio模块底层实现的理解有更大的帮助.主要参考为 ...

  7. 协程运行原理猜测: async/await

    1.根据await调用链寻找最终的生产者或服务提供者: 2.请求服务: 3.进行执行环境切换,跳出顶层函数(第一个无await修饰的函数),执行后面的语句: 4.服务完成,将服务数据复制给最底层的aw ...

  8. Python3的原生协程(Async/Await)和Tornado异步非阻塞

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_113 我们知道在程序在执行 IO 密集型任务的时候,程序会因为等待 IO 而阻塞,而协程作为一种用户态的轻量级线程,可以帮我们解决 ...

  9. 通过async实现协程的延迟执行及结果获取

    在上一次https://www.cnblogs.com/webor2006/p/12022065.html对于协程的async和wait进行了初步的学习,其可以加速执行的性能,其实对于async它是提 ...

随机推荐

  1. [转帖]Helm 3 使用 harbor 作为仓库存储 charts

    Helm 3 使用 harbor 作为仓库存储 charts https://www.cnblogs.com/innerpeacez/p/11252198.html 之前需要 使用tiller 现在貌 ...

  2. OI之路

    由于各种因素 学习.初赛.时间... 我的oi可能会结束, 我也不甘于放弃, 所以 综合今后的表现, 我再决定 以后我尽量写博客.

  3. 『金字塔 区间dp』

    金字塔 Description 虽然探索金字塔是极其老套的剧情,但是这一队 探险家还是到了某金字塔脚下.经过多年的研究,科 学家对这座金字塔的内部结构已经有所了解.首先, 金字塔由若干房间组成,房间之 ...

  4. delphi 格式转换

    TO_CHAR 是把日期或数字转换为字符串 TO_DATE 是把字符串转换为数据库中得日期类型转换函数TO_NUMBER 将字符转化为数字 TO_CHAR 使用TO_CHAR函数处理数字 TO_CHA ...

  5. 用RD,GR,BL三个方法内代码生成一张图片(非原创,我只是完整了代码)

    我公开以下图片的源代码,,是ppm格式的,,自己找到能打开的工具.. (非原创,我加工的代码,可直接执行运行输出,缩略图能看到效果)  这是原博客 http://news.cnblogs.com/n/ ...

  6. 1-python运算符和逻辑控制语句

    目录 运算符 条件语句if…else 断言assert 循环语句while 遍历for循环 1.运算符 1.1.算数运算符 加+.减-.乘*.除/.余%.次方**.向下取整除// 1.2.赋值运算符 ...

  7. 2019 满帮java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.满帮等公司offer,岗位是Java后端开发,因为发展原因最终选择去了满帮,入职一年时间了,也成为了面试官,之 ...

  8. Java自学-类和对象 包

    Java中的 包 包: package 把比较接近的类,规划在同一个包下 步骤 1 : 把比较接近的类,规划在同一个包下 Hero,ADHero 规划在一个包,叫做charactor(角色) Item ...

  9. Java 8 in Action

    https://www.cnblogs.com/HelloDeveloper/p/11404523.html /** * @param args */public static void main(S ...

  10. Django:RestFramework之-------序列化器

    8.序列化 功能: 对请求数据进行验证 对Queryset进行序列化 8.1一个简单序列化: import json from api import models from rest_framewor ...