用動易做的校園網站建站平臺
對于經常接觸高并發(fā)服務的同學來學,會經常涉及到性能優(yōu)化,但是由于平時很少總結,內容會比較分散,這里簡單做一些總結
1:空間換時間
比如一些數(shù)據(jù)的訪問需要很快返回結果,原本在磁盤上的數(shù)據(jù),需要放到內存里面。
再比如為了能快速超找定位一些數(shù)據(jù),我么會設計一些hash類的數(shù)據(jù)結構,提高查找效率
另外和這個相反的就是時間換空間,當然這種一般就不是高性能服務的常用方法,比較典型的就是使用壓縮算法了。
2:并行/異步處理
并行一般是多線程/多進程/多協(xié)程來協(xié)作處理,提高并發(fā)度,提高qps,或者減少請求 處理時間。
異步通常比同步/阻塞的方式要快,也不會比協(xié)程慢,但是會增加一些代碼的理解難度
3:預先/延后處理
比如提前讀取數(shù)據(jù),使用的時候能快速返回,不用再去讀取,屬于預先處理
延后處理,比如copy on write,典型的是c++ string的實現(xiàn),屬于寫時拷貝。
4:緩存/批量合并
常見的cpu緩存,cdn緩存,程序中的LRU緩存,都屬于一種緩存技術吧
批量合并,典型的是查詢數(shù)據(jù),一次可以執(zhí)行多條命名,如redis的mget,pipeline等
5:算法和數(shù)據(jù)結構
算法這個就比較好理解了,n次方的算法事件復雜度和O(n)的算法復雜度,執(zhí)行時間差異還是非常明顯的
數(shù)據(jù)結構,比如什么場景適合用vector/list,什么場景適合用map/hash_map這也非常重要,需要熟悉每種數(shù)據(jù)結構的原理,知道起操作的時間復雜度,來選擇合適的數(shù)據(jù)結構