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

iis 网站属性个人优秀网站

iis 网站属性,个人优秀网站,wordpress加速优化服务,网站APP注册做任务纤程#xff08;Fiber#xff09;和协程#xff08;coroutine#xff09;是差不多的概念#xff0c;也叫做用户级线程或者轻线程之类的。Windows系统提供了一组API用户创建和使用纤程#xff0c;本文中的库就是基于这组API实现的#xff0c;所以无法跨平台使用#xff… 纤程Fiber和协程coroutine是差不多的概念也叫做用户级线程或者轻线程之类的。Windows系统提供了一组API用户创建和使用纤程本文中的库就是基于这组API实现的所以无法跨平台使用非Windows程序员可以闪人了当然如果有兴趣可以继续看下去找个第三方的协程库封装一下也能实现相同的效果。关于纤程更详细的信息可以查阅MSDN。 纤程的概念中有两个关键点 纤程拥有独立的栈空间和寄存器环境纤程在用户态实现调调度也就是说完全由程序员控制下图演示了几个纤程相互切换的过程注意每个纤程都有独立的栈并且通过SwitchToFiber函数切换到其他纤程   作为对比我们可以看一下函数调用过程中的堆栈变化情况下面是示意图表示了func1 - func2 - func3 这种常见的函数嵌套调用关系     每一次函数调用都会创建一个新的栈帧stack frame合起来就构成整个调用栈函数返回时其栈帧也随之释放。对于函数调用我们可以确定的一点是在不抛出异常的情况下被调用函数执行完毕后一定会在调用点返回并继续执行下一条语句。但纤程之间的调用切换却不同一个纤程可以在任意位置切换到其他纤程并且可能永远都不会再切换回来也可能从其他任意纤程不必是刚刚切换到的切换回来前面的示意图描述的只是一种非常简单的情况实际的情况可能非常复杂复杂到导出都是跳来跳去的箭头理也理不清。在纤程间切换有点像用加强版的goto用的时候固然很爽但后续的维护却是个麻烦。 所以就像用while/for/switch-case代替goto一样我们也需要封装一组新的API来代替对操作系统API的直接调用。一方面在封装过程中我们可以对纤程的行为实际是程序员的行为施加一些安全约束使得更容易写出安全的代码或者更不容易写出不安全的代码另一方面从goto到while/switch等过程控制语句实际上是一种抽象层次的提升对大部分常见需求后者用起来更方便更不容易出错写出的代码也更简洁易懂类似的从系统API到新的封装API或者封装类也是抽象层次的提高可以更方便的应用在各种业务场景最后直接使用系统API需要写很多维护纤程的辅助代码这类代码通常重复而又分散到业务代码的各个角落进一步降低了程序的可读性和提高了维护难度封装也是为了解决这个问题。 好了废话说完了我们先上一段代码尝尝鲜 1 const int RUN_TIMES 5;2 3 int number 0;4 bool shutdown false;5 6 Fiber fib([number, shutdown]7 {8 while (!shutdown)9 { 10 number; 11 Fiber::yield(); // A控制权移交到主纤程 12 }13 }); 14 15 for (int i 0; i RUN_TIMES; i) 16 { 17 fib.resume(); // B: 切换到子纤程执行 18 } 19 20 printf(number %d\r\n, number); 这里先创建了一个纤程实现number变量累加的功能然后在for循环中执行姑且用这个词最终得到正确的结果。AB两处代码分别实现了纤程的切换实际上是封装了对SwitchToFiber的调用注意两个函数调用细节上的不同resume表示切换到对象包装的纤程是普通成员函数yield表示控制权移交给调用者纤程是静态成员函数大家可以思考下为什么有静态和非静态成员函数的差别。 下面是用纤程实现生产者-消费者模型的代码 1 int product_count 0;2 bool is_end_time false;3 4 const int RUN_TIMES 3;5 6 // 生产者纤程7 Fiber fib_producer([is_end_time, product_count]8 {9 srand((unsigned)time(NULL)); 10 11 while (!is_end_time) 12 { 13 int new_product_count (int)((double)rand() / RAND_MAX * 10) 1; 14 product_count new_product_count; 15 16 printf([producer] create new products: %d\r\n, new_product_count); 17 18 Fiber::yield(); 19 } 20 21 printf([producer] off duty.\r\n); 22 }); 23 24 // 消费者纤程的执行函数 25 auto consumer_proc [is_end_time, product_count](const int seq_number) 26 { 27 int total_count 0; 28 29 while (!is_end_time) 30 { 31 if (product_count 0) 32 { 33 product_count--; 34 total_count; 35 printf([consumer %d] got 1 product, total got %d, remain %d\r\n, seq_number, total_count, product_count); 36 } 37 38 Fiber::yield(); 39 } 40 41 printf([consumer %d] off duty.\r\n, seq_number); 42 }; 43 44 const int CONSUMER_COUNT 3; 45 int consumer_seq_number 0; 46 47 // 创建消费者纤程数组 48 std::vectorFiber consumer_array(CONSUMER_COUNT); 49 std::for_each(consumer_array.begin(), consumer_array.end(), [](Fiber item){ item Fiber([]{ consumer_proc(consumer_seq_number); }); consumer_seq_number; }); 50 51 consumer_seq_number 0; 52 53 for (int i 0; i RUN_TIMES; i) 54 { 55 fib_producer.resume(); 56 57 while (product_count 0) 58 { 59 consumer_array[consumer_seq_number].resume(); 60 consumer_seq_number (consumer_seq_number 1) % CONSUMER_COUNT; 61 } 62 } 63 64 is_end_time true; 65 66 // 等待纤程结束 67 Fiber::await_all(consumer_array); 68 Fiber::await(fib_producer); 程序末尾出现了await和await_all两个新的方法可以先不用管不影响主要逻辑。由于所有纤程都是在同一个线程中运行的所以无需加锁这也是使用纤程的一个重要好处也是我们这个封装库的主要目的之一。   限于篇幅这次就只写这么多了更多的内容将放到后面的帖子中总计还要写四、五篇的样子。但代码实际上已经写完了急性子的园友可以直接到这个地址看代码 https://code.csdn.net/xrunning/fiber   建了一个QQ群微观架构设计165241092主要讨论C代码级设计感兴趣的园友加进来一起讨论学习。  转载于:https://www.cnblogs.com/xrunning/p/4176331.html
http://www.sadfv.cn/news/406944/

相关文章:

  • 专门做家纺的网站暴雪
  • 郑州高端网站开发福州市建设局职改办门户网站
  • 石家庄营销型网站建设公司国内网站建设需要多少钱
  • 大型网站建站公司 上市装修做劳务去哪个网站找工地
  • 网站软件有哪些asp+sql server典型网站建设案例 光盘
  • 网站流量与带宽做网站设计需要什么技术
  • aardio 网站开发企业展厅设计专业的公司
  • 网站内搜索关键字宜宾建设网站
  • 建站自助电子商务网站开发指南
  • 江门网站seo优化怎么用小旋风网站建设教程
  • 环卫公厕建设门户网站访谈宝塔wordpress安装
  • 个人企业网站网站目录安全设置
  • 自己建设博客网站一个网站的域名突然换了
  • 丰台网站建设多少钱展馆
  • 腾讯企业邮箱域名购买咸阳seo培训
  • 破解网站后台密码wordpress增加角色
  • 可以做彩票网站的工作室浙江省住房和城乡建设厅网官方网站
  • 山东省住房和城乡建设局网站首页从零开始学android编程
  • 佛山网站建设佛山自己创建app
  • 中山做营销型网站公司电商运营培训班
  • 免费信息网站建设平台linux wordpress 区别
  • 可视化建站网站源码成都企业网站设计
  • 昆明网站建设优化图片传媒网站后台免费模板
  • 淘掌门官方网站wordpress切换php版本
  • ps怎么做响应式网站布局图wordpress浮动快捷
  • 天津网站建设工具wordpress 禁用google
  • 兖州住房与城乡建设局网站wordpress优惠券
  • 服装网站建设百度网址安全检测
  • 门源网站建设公司dw制作wap网站怎么做
  • 黄浦建设机械网站丹东建设网站