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

深圳做二类学分的网站有了网站源码如何做网页

深圳做二类学分的网站,有了网站源码如何做网页,网站源码站,外贸英文建站从处理器的角度来说#xff0c;条件分支会导致指令流水线的中断#xff0c;所以控制语句需要严格保存状态#xff0c;因为处理器是很难直接进行逻辑判断的#xff0c;有可能它会执行一段时间#xff0c;发现出错后再返回#xff0c;也有可能通过延时等手段完成控制流的正…从处理器的角度来说条件分支会导致指令流水线的中断所以控制语句需要严格保存状态因为处理器是很难直接进行逻辑判断的有可能它会执行一段时间发现出错后再返回也有可能通过延时等手段完成控制流的正确性。所以笔者在想使用过多的if _else除了可读性差是否还会对执行效率造成影响呢 于是笔者决定采用职责链重构if控制语句笔者猜想如果采用设计模式既可以避免if分支提高执行效率同时可以让程序具备解耦合性和可维护性是否是一种更优解呢 为了验证笔者的猜想更好的优化c语言程序笔者使用职责链模式对一段if_else程序进行了重构。 程序的性能标准是执行时间计算程序时间的程序来源于C语言 计算程序运行时间精确到毫秒/微秒_c语言计算运行时间-CSDN博客 以下是笔者本人用c编写的责任链设计模式 #includestdio.h #includestdlib.h #includememory.h #includestring.h #include windows.htypedef int (*Handler)(int);typedef struct task_node {Handler handler;struct task_node* next; }taskN;int task1(int a) {if (a 1) {//printf(a 1); printf会耗费大量时间为了不影响测试所以只留下判断语句return 0;}return -1; }int task2(int a) {if (a 2) {return 0;}return -1; }int task3(int a) {if (a 3) {return 0;}return -1; }int task4(int a) {if (a 4) {return 0;}return -1; }int task5(int a) {if (a 5) {return 0;}return -1; }int task6(int a) {if (a 6) {return 0;}return -1; }int task7(int a) {if (a 7) {return 0;}return -1; }int task8(int a) {if (a 8) {return 0;}return -1; }int task9(int a) {if (a 9) {return 0;}return -1; }int task10(int a) {if (a 10) {return 0;}return -1; }int task11(int a) {if (a 11) {return 0;}return -1; }int task12(int a) {if (a 12) {return 0;}return -1; }taskN* initi() {taskN* tas1 malloc(sizeof(taskN));taskN* tas2 malloc(sizeof(taskN));taskN* tas3 malloc(sizeof(taskN));taskN* tas4 malloc(sizeof(taskN));taskN* tas5 malloc(sizeof(taskN));taskN* tas6 malloc(sizeof(taskN));taskN* tas7 malloc(sizeof(taskN));taskN* tas8 malloc(sizeof(taskN));taskN* tas9 malloc(sizeof(taskN));taskN* tas10 malloc(sizeof(taskN));taskN* tas11 malloc(sizeof(taskN));taskN* tas12 malloc(sizeof(taskN));tas1-handler task1;tas2-handler task2;tas3-handler task3;tas4-handler task4;tas5-handler task5;tas6-handler task6;tas7-handler task7;tas8-handler task8;tas9-handler task9;tas10-handler task10;tas11-handler task11;tas12-handler task12;tas1-next tas2;tas2-next tas3;tas3-next tas4;tas4-next tas5;tas5-next tas6;tas6-next tas7;tas7-next tas8;tas8-next tas9;tas9-next tas10;tas10-next tas11;tas11-next tas12;return tas1;}void process(taskN* bol, int a) {int i bol-handler(a);while (i ! 0){i bol-handler(a);bol bol-next;} }void main() {double run_time;LARGE_INTEGER time_start; //开始时间LARGE_INTEGER time_over; //结束时间double dqFreq; //计时器频率LARGE_INTEGER f; //计时器频率QueryPerformanceFrequency(f);dqFreq (double)f.QuadPart;QueryPerformanceCounter(time_start);taskN* bol initi();int a 12;for (int i 0; i 50000000; i){/*if (a 1) {}else if (a 2) {}else if (a 3) {}else if (a 4) {}else if (a 5) {}else if (a 6) {}else if (a 7) {}else if (a 8) {}else if (a 9) {}else if (a 10) {}else if (a 11) {}else if (a 12) {}else {}*//*process(bol, a);*/switch (a) {case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 12:break;default:break;}}QueryPerformanceCounter(time_over); //计时结束run_time 1000000 * (time_over.QuadPart - time_start.QuadPart) / dqFreq;//乘以1000000把单位由秒化为微秒精度为1000 000/cpu主频微秒printf(\nrun_time%fus\n, run_time);/*为了偷懒程序就懒得free了*/} 使用if_else时 a1,第一个循环执行 a12,最后一个循环执行 两者时间基本没区别在循环语句中 笔者还测试了只有if( a 1)这一个判断语句下的性能 可以看出基本没什么区别。 使用case时 a12时如下与a1时的结果几乎没有区别 switch语句除了比较简洁一点执行速度完全没法比。 使用责任链时 任务优先级在责任链上过高(a1) 任务优先级在责任链过低a12) 可以看出职责链的速度非常慢特别是任务优先级低时执行速度几乎是if_else的150倍。 综上得出if_else的执行速度是最快的如果判断的时间复杂度过大而且判断语句的数量较少使用if_else性能可能会更好。 但是上述的前提是建立在判断语句的数量较少的情况下。 现在让我们考虑这样一种情况不是判断a从1到12而是从a到10000呢程序等价于下图 再附加一个条件大多数情况下a的值都是1。 虽然if_else的耗时比较短但是在大量的循环下耗时也不容小觑。因为a大多数情况是1其他的判断分支只有小概率发生此时我们使用责任链就可以完美跳过这些语句的判断 程序用for循环表示中间的分支写得不准确理解意思就好 当然读者可能认为if else if在这里也可以跳过中间的语句也能实现优先级但是如果改成这样呢 这种情况下if else if只能执行其中一个显然不行使用大量的if就变成了上面的情况我们不得不将原先的代码大量删除并重写这十分让人难受。这样一对比对于部分实现的if分支使用责任链的优点有什么呢如下图 在责任链任务里进行改动可以选择责任链终止的位置跳过后面的任务当然通过goto等跳转指令也是可以实现的但是if语句很难做到这样灵活对于复杂的业务场景很难在原先的基础上进行拓展责任链的解耦合性和可拓展性是非常好的优点。 考虑复杂的业务场景责任链明显优于传统的if_else。 尽管如此if_else还是十分友好的特别是在mcu等产品的开发中使用设计模式的资源花费简直是奢求毕竟设计模式是针对高级语言的大多数情况下if_else往往是最优解。不过笔者认为大量使用if_else的前提是项目不需要长期维护一般情况下还是要多使用设计模式例如在linux内核中就有源码使用了责任链模式这是从性能解耦合性和可读性等多方面考虑值得开发者学习。如果是小型项目对维护没有要求而且控制语句的数量较少为了性能和简便性可以考虑直接使用if_else分支。但是如果大型项目中含有大量if分支可以考虑使用设计模式重构。
http://www.hkea.cn/news/14496096/

相关文章:

  • 建设校园网站意义四川省城乡住房建设厅网站
  • 商业网站设计与制作请描述网站开发的一般流程图
  • 怎么做足球直播网站网店运营
  • 引擎网站推广法怎么做现在网站建设用到哪些技术
  • 帮别人设计网站的网站阳江招聘网最新消息
  • 怎么做公司销售网站PHP 网站搜索怎么做
  • 嘉兴企业网站模板建站沈阳亚洲城属于哪个社区
  • asp.net 网站管理工具 遇到错误网站开发设计的技术路线
  • 书画网站建设方案策划上海装修公司投诉
  • 网站如何更新一个专门做酒店招聘的网站
  • 跨境电商那个网站做饰品比较好万网建网站流程
  • 建立网站的步骤有哪些想开民宿自己怎么做介绍的网站
  • ps做字幕模板下载网站有哪些子商务网站建设的一般流程
  • 四川建设厅网站网站建设在哪个软件下做
  • 在线crm网站discuz是什么网站程序
  • 关于网站开发的论文自助建站凡科网
  • 太原cms建站南宁企业网站制作模板
  • 新津网站建设政务服务网站建设整改报告
  • wordpress多站点在上海做网站
  • 河南郑州广告公司网站建设wordpress如何设置注册用户名大于4个字符
  • 营销网站首页设计网络seo关键词优化技术
  • 百度建一个网站多少钱天津建设工程信息网渤海油田
  • 一流的聊城做网站费用2018建设网站
  • app软件下载网站免费进入最全做暖暖网站
  • 纪检网站建设计划保定市住房和城乡建设厅网站
  • ipv6改造 网站怎么做6大连德泰建设
  • 西安+美院+网站建设中山网站seo优化
  • 南宁公司网站建设dw旅游网站模板
  • 庆阳建设局网站WordPress搜索词记录
  • 图列说明网站开发的流程网站建设需要什么专业