http://coolshell.cn/articles/4162.html
有兩個相同功能代碼如下,請在在A,B,C是什麼的情況下,請給出三個原因case 1比case 2快,還有三個原因case 2會比case 1要執行的快。(不考慮編譯器優化)
case1:
for(i=0;i<N;++i){
a;
b;
c;
}
case2:
for(i=0;i<N;++i){
a;
}
for(i=0;i<N;++i){
b;
}
for(i=0;i<N;++i){
c;
}
Case1比case2快:
1. a b c共用一個公共資源,在一起加鎖解鎖一次即可;分開則要三次;
2. a b c同時利用一個IO設備,在一起打開關閉一次即可;分開則要三次;
3. a b c訪問同一個遠程數據庫進行操作,一起則打開關閉一次連接接口;分開則三次;
4. a b c都是空白代碼,什麼都不做,這樣在一起相當於執行一次循環,分開則三次;
5. a b c都是減少N的操作,則case1表較快;或者都是增加i的操作也同樣;
6. a b c中至少含有一個break,或者return也一樣;則case1肯定快;
case2比case1快:
1. a b c分別有三個不同的鎖,case1需要同時滿足才能執行;case2則分別滿足即可;
2. a b c都是讀磁盤操作,分別讀三個不同位置的連續磁盤塊
3. a b c都把N加了0.5,則case1就是死循環了,或者把i減少0.5也是同樣;case2肯定快
有一個開玩笑的就是不在同一個配置的機器上運行,哈哈~