总结:
可以用Linux内核中的宏定义,来帮助CPU提前做条件分支预测,提高效率;
尽可能减少if else,条件分支判断会拖延CPU并行处理语句的效率。
取指令,指令预解析,取数据,执行,写回
【为什么CPU讨厌if语句?】
CPU会并行处理数据,如果遇到条件分支,那是做if条件里面的还是if条件外面的?
如果执行if里面的,赌错了,那么就全是无用功了,就变成串行了;
Linux内核里,写了这样一些宏定义:
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
// likely 代表 x 经常成立
// unlikely 代表 x 不经常成立
这两行的区别,是给CPU看的。
F:取指令
D1:指令预解析
D2:取数据
EX:执行;(execute)
WB:写回;