從前程式員隻對實作功能感興趣, 多核平台推出之後,程式員又需要多長一根筋。要不寫出來的程式效率差, 又要被使用多核機器的玩家罵了。誰願意用多花錢買了多核機器,軟體卻是單線程,隻用得到單核的性能。
“不就是多線程嘛,好辦的不得了。我的程式裡面本來存在幾個線程。調用庫的時候, 庫裡面就implicit的開了幾個線程。這樣不就适合多核了嗎。” 程式員們如是說。
殊不知少考慮了一個非常重要的問題。一個線程就相當于一個勞工, 是不是勞工越多,生産效率就越高。這是典型的是否人多力量大的命題。 答案自然是否定的。
線程是多了, 但是如果同一時間裡面隻有一個線程在幹活, 線程多有什麼用!!! 同一時間裡面幹活的線程數量被稱為 concurrency level. 比如同一時間的幹活線程數量是4個,那麼此時的concurrency level 就是4 (在有些分析軟體裡面是以0為concurrency level 計數起點,于是此時concurrency level 是3, 比如cfinder 就是如此計concurrency level 的)。 如果4核機器上,concurrency level為4的時間維持得很久, 比如占整個運作時間的80% , 這樣的多線程程式是真正對多核機器有效的。
如果concurrency level 為4的時間, 占整個運作時間的1%, 90%的時間concurrency level 為1 , 這樣的多線程程式和單線程有差別嗎!!! 這樣的程式隻能用到單核能力, 多核能力基本沒有用到,是一定是需要性能調優的。
本文轉自Intel_ISN 51CTO部落格,原文連結:http://blog.51cto.com/intelisn/131491,如需轉載請自行聯系原作者