在Linux 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别?
	
	首先要明确:
if(likely(value)) 等价于 if(value)
if(unlikely(value)) 也等价于 if(value)
	
	也就是说 likely() 和 unlikely() 从阅读和理解代码的角度来看,是一样的!!!
	#define likely(x)       __builtin_expect((x),1)
	#define unlikely(x)     __builtin_expect((x),0)
__builtin_expect() 是 GCC (version >= 2.96)提供给程序员使用的,目的是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。
	__builtin_expect((x),1) 表示 x 的值为真的可能性更大;
	__builtin_expect((x),0) 表示 x 的值为假的可能性更大。
	
	也就是说,使用 likely() ,执行 if 后面的语句 的机会更大,使用unlikely(),执行else 后面的语句的机会更大。
	例如下面这段代码,作者就认为 prev 不等于 next 的可能性更大。
	if (likely(prev != next)) {
	next->timestamp = now;
	...
	} else {
	...;
	}
	
	通过这种方式,编译器在编译过程中,会将可能性更大的代码紧跟着起面的代码,从而减少指令跳转带来的性能上的下降。
	另外内核2.6.31.5中likely和unlikely还有一种定义:
	# ifndef likely
	# define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1))
	# endif
	# ifndef unlikely
	# define unlikely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 0))
	# endif
	
	举个例子(内核版本2.6.22.6):/kernel/shed.c中有一段:
	if (likely(!active_balance)) {
	/* We were unbalanced, so reset the balancing interval */
	sd->balance_interval = sd->min_interval;
	} else {
	/*
	* If we've begun active balancing, start to back off. This
	* case may not be covered by the all_pinned logic if there
	* is only 1 task on the busy runqueue (because we don't call
	* move_tasks).
	*/
	if (sd->balance_interval max_interval)
	sd->balance_interval *= 2;
	}
	
	编译过程中,会将if后面{}里的内容编译到前面,else 后面{}里的内容编译到后面。若将likely换成unlikely 则正好相反。
总之,likely与unlikely互换或不用都不会影响程序的正确性。但可能会影响程序的效率。
	
	linux内核中的likely和unlikely宏定义:http://www.linuxdiyf.com/linux/604.html

