兩個程序塊在不同情況下哪個更快

http://coolshell.cn/articles/4162.html

有兩個相同功能代碼如下,請在在ABC是什麼的情況下,請給出三個原因case 1case 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肯定快

 

有一個開玩笑的就是不在同一個配置的機器上運行,哈哈~

發佈了231 篇原創文章 · 獲贊 36 · 訪問量 142萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章