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

深圳住房和建设局官网网站桂林什么公司做网站推广好

深圳住房和建设局官网网站,桂林什么公司做网站推广好,药膳网站建设的目的,天城建设网站【导读】#xff1a;C 20 终于引入了协程特性#xff0c;给库作者提供了一个实现协程的机制#xff0c;让用户方便使用协程来编写异步逻辑#xff0c;降低了异步并发编程的难度。结合我最近协程的学习#xff0c;在这里记录一下相关内容。以下是正文使用场景协程和普通函数… 【导读】C 20 终于引入了协程特性给库作者提供了一个实现协程的机制让用户方便使用协程来编写异步逻辑降低了异步并发编程的难度。结合我最近协程的学习在这里记录一下相关内容。以下是正文使用场景协程和普通函数相比多了个中途随时 挂起 随后 恢复 的过程当用户调用一个阻塞请求接口从而让出控制权当响应时恢复之前的控制流从而大大提高线程复用率这也注意了协程只是并发的并不是真正意义上的并行在 IO 密集型场景下协程能够很好的提高资源利用率用少数的线程达到并发成百上万个协程的效果。而相对传统的线程池 回调模式每发起一个请求为了避免阻塞当前线程需要挂一个回调函数处理后续过程而回调函数又可能产生竞争导致得加锁处理。而协程却能够以同步方式写实现异步后续过程直接挂起当响应的时候恢复执行。我参与的项目中对象随时都可能起个线程干活或者常驻于对象生命周期里统计下来整个项目居然开了几百个线程由于多线程编程难免导致竞争从而需要锁这种很低级的机制做同步而一旦引入了锁就不可避免的扩散开来大家看到这里加把锁那我也加把锁统计下来代码里面居然也有几百把锁。真是维护的噩梦。由于协程能够随时挂起后续恢复这就能实现一些延迟计算的特性例如生成器。扯远了本文主题是关于 C 20 的协程在 C 20 还没稳定之前先来学习一下相关知识读完本文后你应该能利用这个机制实现一些想要的协程了。概念模型C 20 的协程设计为无栈协程相对于有栈协程省掉了上下文切换开销[1]只能手动切换效率更高也不用管理复杂的寄存器状态移植性更好但这同时也导致了不能被非协程函数嵌套调用。同时引入了 3 个关键字1. co_yield: 挂起并返回值2. co_await: 挂起3. co_return: 结束协程当一个函数出现了上面的关键字则该函数是个协程。Promise当 caller 调用一个 callee 协程的时候协程自身的状态信息 [2]形参局部变量自带数据各个阶段点执行点会被保存在堆上的 Promise 对象中这也是编译器会在协程里面插入 Promise 相关代码以及一些执行点。由于 Promise 的大小可以在编译期计算出来从而避免了内存浪费。而 Promise 对象所有权可由coroutine_handle 句柄持有。Future而 Future 对象主要是与 Promise 对象交互的桥梁既 caller 与 callee 之间的通信1. callee 挂起时将值返回给 caller: yield 语义2. callee 执行结束时将值返回给 caller: return 语义3. callee 恢复时caller 将值带给 callee需要注意的是这些概念和标准库的 std::promise/std::future 不是同一个东西后者用于做同步用std::future会阻塞等待直到 std::promise 提供值可以看做是条件变量的封装同样地和其他语言的 Promise/Future 概念也不一样。Awaitable如果一个对象是 Awaitable 对象那么可以用 co_await 操作符去触发该对象的动作 ready/suspend/resume从而转移、恢复控制权co_await 细节留到后面在介绍。具体机制了解了概念模型后我们可以进一步探讨背后的机制了。Promise/Future 对象当一个协程被调用时会创建 Promise 对象然后编译器会在各个阶段插入一些代码[3]{  co_await promise.initial_suspend();  try  {      }  catch (...)  {    promise.unhandled_exception();  }FinalSuspend:  co_await promise.final_suspend();}可以看到一个协程函数分为如下几个步骤1. 从堆上 (operator new) 创建 Promise 对象保存协程的状态信息2. initial_suspend 阶段用于在执行协程主体  代码前做些事情3. 阶段执行协程的主体代码4. unhandled_exception 阶段若抛异常处理异常5. final_suspend阶段协程结束收尾动作在这阶段的 coroutine_handle::done 方法为 truecaller 可以通过这个方法判断协程是否结束从而不再调用 resume 恢复协程。而协程返回类型则是一个 Future 对象这一步编译器通过 Promise::get_return_object() 来创建 Future 对象。而 Future 对象一般持有 Promise 的句柄coroutine_handle这样 caller 可以通过 Future 与 Promise 交互从而恢复协程。而 Promise 对象释放的时间点有两个避免重复执行否则会 double free1. final_suspend 阶段 resume 后2. 调用 coroutine_handle::destroy() 方法比较好的做法是在 final_suspend 阶段挂起这时候就不可 resume 了在 caller 通过调用 Future 持有的句柄 destroy() 方法释放 Promise 对象。综上一个 Promise 对象需要实现如下方法1. initial_suspend: 返回一个 Awaitable 对象
http://www.yutouwan.com/news/377286/

相关文章:

  • 做网站路径网站建设找祥赢
  • 天津人工智能建站系统软件公司邮箱申请注册
  • 成都网站建设seo什么是分类信息网站营销
  • 容桂网站建设wordpress 代替cms
  • 网站用的字体网站怎么创建论坛
  • 苏州专业网站建设公司自建网站百度
  • 怎么看网站的外链wordpress高亮代码转义
  • 虚拟主机怎么建网站网页制作专业服务
  • 郑州做网站zzmshl广州微网站建设dmz100
  • 绵阳低价网站建设承包企业管理系统
  • 山东平台网站建设公司黄骅贴吧最近发生的事
  • 丽水建设部门网站html5手机网站开发视频
  • 药材网网站技术建设做网站公司的出路
  • 制作一个网站需要多少时间网站架构布局
  • 哈尔滨做网站公司哪家好学做网站论坛教程
  • 小说网站怎么做原创佛山高端网站制作公司
  • 招聘网站开发源代码天津网站建设美丽
  • 做网站图片要求高吗百度用户服务中心电话
  • wordpress站群搭建wordpress log in
  • 兼职做页面的网站wordpress主题改字体颜色
  • 建设红外测温仪网站深圳横岗做网站
  • 网站开发方向c语言浙江网站建设推广
  • 网站上传教程下载官方大庆加油app软件
  • 石材外贸网站有哪些用wordpress
  • 两学一做纪实评价系统登陆网站免费咨询兽医
  • 个人网站后台模板wordpress 5开发接口
  • 楼盘销售管理网站开发资源重庆网站定制哪家好
  • 网站建设管理视频桂林北站改造
  • 个人网站示例设计门户网
  • 医药类网站建设评价知名企业官网设计公司