为什么要减少分支语句(if else等)的使用
这和处理器的运行有很大的关系
- 处理器通过使用流水线来获得高性能。这种方法是通过重叠连续指令。一个指令的处理要经过很多的阶段,每个阶段执行所需操作的一小部分(从内存读取指令、确定操作类型、从内存中读取数据、执行算术运算、写数据、更新程序计数器)。
- 分支语句(if else等)的缺点:
- 当机器遇到分支时,只有当分支条件求值完成之后,才能决定分支往哪边走。错误的预测则会浪费大约15~30个时钟周期,导致性能严重下降。
- 要解决上面的问题,可以使用条件传送。
- 下面是简单的示例:
//条件分支的方式
long absdiff(long x,long y){
long result;
if(x<y)
result = y - x;
else
result = x - y;
return result;
}
//条件传送的方式
long cmovdiff(long x,long y){
long rval = y - x;
long eval = x - y;
long ntest = x >= y;
if(ntest) rval = eval;
return rval;
}
- 在java中,实际项目,可以通过反射的方式减少条件分支语句的使用以提高软件运行的效率。
更多信息:《深入理解计算机操作系统》