800
技術社區[雲棲]
連載:麵向對象葵花寶典:思想、技巧與實踐(5) - 麵向對象迷思:麵向對象導致性能下降?
麵向對象會導致性能降低?
這是一個在IT江湖流傳已久的傳說,很多對麵向對象不甚了解、或者一知半解的人,每當需要抵觸麵向對象時,就會把這條“金科玉律”拿出來救駕!
更要命的是,每個相信這個傳說的人都會舉一個看起來很顯而易見的例子:C和Java的對比!
你可以到網上搜索一大堆C和Java的性能對比,你自己也可以做一個簡單的對比測試,我毫不懷疑測試結果肯定是C快,但這能證明麵向對象導致性能降低麼?
從語言層麵來說,麵向對象的語言肯定要比麵向過程的語言性能要低一些,畢竟這是由處理機製決定的,就像不同的人的差別由基因決定一樣,這個很難改變。
但在實際應用中,除了上一章我們提到的專有係統(操作係統、驅動、嵌入式),對一般的業務係統來說,無論是企業級應用、還是互聯網應用、還是電信銀行應用,無一例外的都是複雜的係統,這些係統要和存儲係統(磁盤、磁帶等)打交道、要通過網絡進行交互、要訪問數據庫。。。。。。等等。
我們看一下常見的一些性能數據(量級數據,不一定精確):
CPU: 每秒10億次,性能是納秒級
內存:每秒1000萬次,每次請求時間是微秒級
磁盤:每次請求5ms,請求時間是毫秒級
網絡(TCP):每次網絡交互2ms,請求時間是毫秒級
數據庫:基本等於網絡和磁盤之和,甚至更慢
從上麵的數據我們可以看出,如果你的業務流程中涉及了磁盤、網絡、數據庫等操作,那麼性能就一下子降到了毫秒級。
而對於大部分開發語言來說,語言本身的運行速度至少是內存級別的
試想一下,你的整個流程中,語言本身的處理占了微妙級的時間,而一次磁盤或者網絡的時間是毫秒級時間,那麼全流程來看,就算你把語言本身的處理速度提高了10倍,對整個流程來說,性能幾乎沒有影響。
例如:假設C語言全流程處理時間:10微秒(語言部分) + 5ms(磁盤操作) = 5.01ms
如果換成Java,那麼處理時間變成:100微秒(語言部分) + 5ms(磁盤操作) = 5.1 ms
從這個簡單的樣例可以看出,語言本省性能的提升,對整個流程中性能提升幾乎沒有影響!!
因此,對於複雜的業務係統來說,性能的好壞是由設計來決定的,而不是由語言來決定的,更不會因為采用了麵向對象而導致性能的降低!
================================================
轉載請注明出處:https://blog.csdn.net/yunhua_lee/article/details/17462873
================================================
最後更新:2017-04-03 12:53:54