閱讀146 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C++編程規範之7:編程中應該知道何時和如何考慮可伸縮性

摘要:

    小心數據的爆炸性增長,不要進行不成熟的優化,但是要密切關注漸進複雜性.用戶數據的算法應該能夠預測所處理的數據量耗費的時間,最好不差於線性關係.如果能夠證明優化必要而且非常重要,尤其在數據量逐漸增長的情況下,那麼應該集中注意力改善算法的O(N)複雜性,而不是進行小型的優化。

    防範可能的未來,要求我們要避免設計中含有麵對更大的文件、更大的數據庫、更多像素、更多窗口、更多進程和更多線路上傳輸的數據時會出現的性能陷阱的現象。

    這一問題的解決方案分為兩個部分。首先,即使不知道數據量是否會大到成為某個特定計算的問題,默認情況下也應該避免使用不能很好地應付用戶數據量的算法,除非這種伸縮性不好的算法有明顯的清晰性和可讀性方麵的好處。在編寫程序時,要預先進行如下的處理:

1.使用靈活的、動態分配的數據,不要使用固定大小的數組。

2.了解算法的實際複雜性。

3.優先使用線性算法或者盡可能快的算法。

4.盡可能避免劣於線性複雜性的算法。

5.永遠不要使用指數複雜性的算法。

    其次,如果有測試數據表明優化非常必要而且重要,尤其是在數據量不斷增加的情況下,那麼應該集中精力改善O(N)複雜性,而不是把精力華仔節省一個多餘假發這樣的微觀優化上。

    總而言之,要盡可能優先使用線性(或者更好的)算法。盡可能合理地避免使用比線性算法差的多項式算法。竭盡全力避免使用指數算法。

最後更新:2017-04-03 12:53:42

  上一篇:go C++編程規範之8:不要進行不成熟的優化
  下一篇:go Java aes加密C#解密的取巧方法