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

惠州制作公司网站懒人图库网站源码

惠州制作公司网站,懒人图库网站源码,平台网站开发多少钱,网络课程开发项目Github主页Coke。 在前几篇文章中#xff0c;多次用到了协程任务上的同步等待和异步等待功能#xff0c;本文将对这部分内容做进一步的介绍。首先来看一个简单的例子 #include iostream #include chrono #include coke/coke.hcoke::Task多次用到了协程任务上的同步等待和异步等待功能本文将对这部分内容做进一步的介绍。首先来看一个简单的例子 #include iostream #include chrono #include coke/coke.hcoke::Taskint prepare() {int ms 100;int ret;ret co_await coke::sleep(std::chrono::milliseconds(ms));if (ret ! coke::STATE_SUCCESS)co_return ret;// do something elseco_return co_await coke::sleep(std::chrono::milliseconds(ms)); }coke::Taskvoid hello() {int ret;ret co_await prepare(100);if (ret coke::STATE_SUCCESS)std::cout Hello world std::endl; }int main() {coke::sync_wait(hello());return 0; }在这个例子中main是我们经常会见到的C函数而hello则是一个协程在C协程中使用co_await来实现对可等待体的异步等待。在hello协程中先展示了如何使用co_await异步等待prepare协程并获取其返回值然后再输出Hello world。 coke::TaskT是满足C 20协程约束的类型在coke中返回coke::TaskT且使用了co_await或co_return的函数是一个协程而T则是协程运行完成后的返回值。由于本文只是介绍coke的使用方法不会深入介绍协程的太多概念如果此前未从了解过协程请一定避免陷入“必须先完全搞懂底层机制再学如何使用”的泥淖就像小学教加法交换律前不会教阿贝尔群的概念一样先把简单的用法搞起来以后有的是机会了解机制。 看到这里熟悉C Workflow的读者可以感受到coke中的协程与workflow中的串行(SeriesWork)很相似都是将一组异步任务串起来逐个执行的组件而coke::sleep和WFTimerTask很相似都是用来完成特定任务的基础组件。但隐约感觉还少一个组件并行(ParallelWork)。令人惊喜的是在协程中组织任务的方式非常直观和灵活无需复杂的机制来实现并行而是提供了方便的coke::async_wait接口只需要将一组任务交给它即可实现并行。 #include iostream #include chrono #include vector #include coke/coke.hcoke::Taskint sleep(int ms) {int ret co_await coke::sleep(std::chrono::milliseconds(ms));co_return ret; }coke::Task parallel(int n) {std::vectorcoke::Taskint tasks;tasks.reserve(n);for (int i 0; i n; i)tasks.emplace_back(sleep(100));std::vectorint rets;rets co_await coke::async_wait(std::move(tasks));std::cout Parallel done std::endl; }int main() {coke::sync_wait(parallel(6));return 0; }细心的读者会发现其中一个瑕疵只有具有相同返回值的协程才能被传递给coke::async_wait这并不是因为技术或语言上的限制而是不希望通过一系列奇技淫巧搞出来一个语法怪兽令人难以读懂和正确使用。对于真的有这种需求的场景目前可以通过封装成无返回值(coke::Taskvoid)的协程来实现。 对于同步等待几乎每个示例代码都会看到coke::sync_wait毕竟C的函数入口目前还是同步方式必然需要同步机制来等待协程运行完成。对于同步等待的使用方式作者认为只需要常见的这一种即可通过这种方式启动一个协程其他所有的操作都以异步等待的方式实现并牢记“仅在同步函数中使用同步等待仅在协程中使用异步等待”。coke认为所有使用者都是聪慧的所以不会采取任何措施来避免线程都被同步等待阻塞的情况。 本系列文章同步发布于个人网站和知乎专栏转载请注明来源以便读者及时获取最新内容及勘误。 附录目前支持的所有同步/异步等待方法 #include iostream #include chrono #include vector #include coke/coke.hcoke::Taskint sleep(int ms) {int ret co_await coke::sleep(std::chrono::milliseconds(ms));co_return ret; }int func() {return 1; }void sync_wait_example() {int ret;std::vectorint vret;// 1. 等待单个coke::Taskret coke::sync_wait(sleep(100));std::cout sync wait one coke::Task ret std::endl;// 2. 等待多个coke::Taskstd::vectorcoke::Taskint tasks;for (int i 0; i 3; i) {tasks.emplace_back(sleep(100));}vret coke::sync_wait(std::move(tasks));std::cout sync wait multi coke::Task\n;// 3. 等待多个coke::Task语法糖适用于任务数量确定的情况vret coke::sync_wait(sleep(100), sleep(100));std::cout sync wait multi coke::Task\n;// 4. 等待单个coke::*Awaiterret coke::sync_wait(coke::sleep(std::chrono::milliseconds(100)));std::cout sync wait one SleepAwaiter ret std::endl;// 5. 等待多个相同类型的coke::*Awaiterstd::vectorcoke::SleepAwaiter awaiters;for (int i 0; i 3; i)awaiters.emplace_back(coke::sleep(std::chrono::milliseconds(100)));vret coke::sync_wait(std::move(awaiters));std::cout sync wait multi SleepAwaiters\n;// 6. 等待多个返回值相同的coke::*Awaitervret coke::sync_wait(coke::sleep(std::chrono::milliseconds(100)),coke::go(func));std::cout sync wait multi Awaiters\n; }coke::Task async_wait_example() {int ret;std::vectorint vret;// 1. 等待单个coke::Taskret co_await sleep(100);std::cout async wait one coke::Task ret std::endl;// 2. 等待多个coke::Taskstd::vectorcoke::Taskint tasks;for (int i 0; i 3; i) {tasks.emplace_back(sleep(100));}vret co_await coke::async_wait(std::move(tasks));std::cout async wait multi coke::Task\n;// 3. 等待多个coke::Task语法糖适用于任务数量确定的情况vret co_await coke::async_wait(sleep(100), sleep(100));std::cout async wait multi coke::Task\n;// 4. 等待单个coke::*Awaiterret co_await coke::sleep(std::chrono::milliseconds(100));std::cout async wait one SleepAwaiter ret std::endl;// 5. 等待多个相同类型的coke::*Awaiterstd::vectorcoke::SleepAwaiter awaiters;for (int i 0; i 3; i)awaiters.emplace_back(coke::sleep(std::chrono::milliseconds(100)));vret co_await coke::async_wait(std::move(awaiters));std::cout async wait multi SleepAwaiters\n;// 6. 等待多个返回值相同的coke::*Awaitervret co_await coke::async_wait(coke::sleep(std::chrono::milliseconds(100)),coke::go(func));std::cout async wait multi Awaiters\n; }int main() {sync_wait_example();coke::sync_wait(async_wait_example());return 0; }
http://www.yutouwan.com/news/12417/

相关文章:

  • 企业为什么需要建站wordpress主题国外优秀
  • 抚松网站建设门户网站建设自查整改
  • 转转网站怎么建设上海英文网站制作
  • 江苏常州青之峰做网站提供东莞微信网站建设
  • 外贸网站建设 广州php视频网站怎么做
  • 手机网站建设口碑好大桥外语官方网站星做宝贝
  • 网站属于什么公司外发加工费计入什么科目
  • 网站站点建设端口号的作用百度竞价账户
  • 想做网站濮阳网站建设怎么看网站有没有做404
  • 网站建设培训心得wordpress 人体时钟
  • 网站开发 网页设计北京师范大学出版社知名网站制作公司青岛分公司
  • 南昌做网站公司大蒜价格国际贸易网
  • asp 网站开发实例教程安徽省建设厅官网查询
  • 深圳网站建设价格多少钱安阳网站设计哪家好
  • 济南高新网站建设简单大气的科技公司名字
  • 建设网站如入什么费wordpress 安装 模板
  • 怎样用js做网站轮播图西安千秋网络科技有限公司怎么样
  • 东莞网站建设专业品牌武进网站建设效果
  • 有没有什么做地堆的网站照片素材库网站免费
  • 北京公司网站建设服务阿里云一个域名做两个网站
  • 水泥制品做阿里巴巴还是网站好泰安市人才信息网
  • 深圳做网站980wordpress网站云备份
  • 切图网站免费网站推广文章
  • 住建部禾建设部是一个网站吗宝塔一键wordpress
  • 兰州做网站哪家好18款app软件免费下载
  • phpcms v9 网站建设入门网站建设与维护工作待遇
  • 网站建设整体情况介绍如何做兼职网站平台
  • 欢迎访问中国建设银行网站西安官网优化报价
  • 南宁网站建设哪家公司运动鞋官方网站建设计划书
  • 怎么开免费网站小程序开发需要多少钱