当前位置: 首页 > 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://wiki.neutronadmin.com/news/377286/

相关文章:

  • 影楼招聘seo技术培训茂名
  • 商标设计网站主要提供哪些服务软件技术毕业设计题目
  • 金华集团网站建设网站地址栏图标文字
  • 湘潭网站seo磐石网络商标设计在线生成器
  • 网站扁平化布局总部在深圳的大企业
  • 网站维护的内容有哪些wordpress手机pc
  • 博物馆网站建设情况说明设计素材图片大全 psd素材
  • 在线捏脸网站需要多少钱wordpress付费附件下载
  • 织梦校园招生网站源码wordpress nas
  • 电子商务网站类型北京有几个区几个县
  • 购物网站服务器价格网站价格表
  • 网站解析不了自己建设网站步骤
  • 游戏秒玩网站做网站每月收入
  • 网页设计师需要学什么技能佛山公司推广优化
  • 大理 网站建设站群系统哪个好用
  • 商丘企业网站建设团队ppt模板大师
  • 天津网站建设基本流程图网站租空间多少钱一年
  • 信用建设网站动态信息报送制度vultr服务器建wordpress
  • 网站代理违法吗hyper cache wordpress
  • 背景 网站建设高档网站模板
  • 建网站 做淘宝客个人做哪方面网站
  • 网站设计优缺点中信建设有限责任公司陶扬
  • 企业网站的建站步骤百度推广seo软件
  • 制作网站站用的软件下载品牌宣传型网站构成
  • 阿里云个人网站建设方案书王烨诡异复苏的漫画叫什么
  • 旅游网站的设计与实现开题报告甘肃兰州为啥要隐瞒阳性人员
  • 唯品会网站建设的目标郑州微信小程序开发公司排名
  • 平面设计在线网站打代码做网站的软件
  • 兰州网站排名分析wordpress主题演示导入
  • 网站建设费用 做个网站要多少钱德州成交型网站建设