当前位置: 首页 > article >正文

2.3.1 协程设计原理与汇编实现coroutine 2

  1. 协程如何实现

    callback是fd有数据接受时回调

    请求接口1基本信息——2 详情——3目录

    请添加图片描述

异步:

异步的实现,但是变成逻辑变成右上角同步的感觉,但实际还是异步!

借助switch被动切换 ,把callback里的recv提取出来

请添加图片描述

然后再封装switch,到send recv里面检查可不可行,可以switch,async就是在send recv前检查可不可以send recv

请添加图片描述

原语操作:switch(函数1, func2) 函数跳转方法

  1. setjmp.c / longjump

    gcc -o setjump setjump.c
    

    setjump返回ret=0, func(0) arg1 longjump1

    setjump(1)这里ret=1, func(1), arg2 longjump2

    请添加图片描述

    每个连接fd,对应一个jump buffer 用于函数跳转

  2. ucontext.c

    context上下文, 入口func1,2,定义栈顶stack1

    没细听,没意义 记不住,有大概的认知即可

    栈大小取决于业务量 ctx[0] ctx[1]互相存储!!!!跳完才打印,不马上打印

    请添加图片描述

    resume恢复 :main到对应协程内funcX里面可以做一个调度器 scheduler while(i-- < count) swapcontext 调度coroutine协程 funcX

    让出yield在协程内部funcX内部切回到mainswapcontext(context[i], maincontxt)

    请添加图片描述


http://www.kler.cn/a/302050.html

相关文章:

  • 【计算机网络】TCP协议特点3
  • 多端校园圈子论坛小程序,多个学校同时代理,校园小程序分展示后台管理源码
  • 缓存cache
  • 服务器上安装Orcale数据库以及PL SQL工具(中文)
  • 生成自签名证书并配置 HTTPS 使用自签名证书
  • Linux 实现自动登陆远程机器
  • 路径规划 | 基于A*算法的往返式全覆盖路径规划的改进算法(Matlab)
  • 【西电电装实习】6. 手装无人机的蓝牙断连debug
  • 【linux006】目录操作命令篇 - pwd 命令
  • vue3 自定义指令 directive
  • CSS-3
  • 如何让大模型更好地进行场景落地?
  • OpenSSL工具验证RSA证书
  • C# 批量更改文件后缀名称
  • 软件测试中常用模型分析
  • 【编程底层思考】性能监控和优化:JVM参数调优,诊断工具的使用等。JVM 调优和线上问题排查实战经验总结
  • 【C语言从不挂科到高绩点】17-C语言中的宏定义
  • 云服务器 卸载mysql5并安装mysql8(图文)
  • docker-compose 部署 flink
  • 笔试强训day10
  • C#基础(10)变长参数和参数默认值
  • 数据结构之数组矩阵存储
  • 树莓派安装 OpenCV 教程
  • 110个oracle常用函数总结
  • uniapp中基于vue3实现输入验证码功能
  • Android 地图搜索商家,检索关键字(高德地图,百度地图),地址搜索(1)