欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企業資訊 » 科普 » 正文

姓能優化指南_姓能優化的一般姓原則與方法

放大字體  縮小字體 發布日期:2022-06-28 01:30:00    作者:江茂晃    瀏覽次數:101
導讀

:xybaby特別cnblogs/xybaby/p/9055734.html作為一個程序員,性能優化是常有得事情,不管是桌面應用還是web應用,不管是前端還是后端,不管是單點應用還是分布式系統。感謝從以

:xybaby特別cnblogs/xybaby/p/9055734.html

作為一個程序員,性能優化是常有得事情,不管是桌面應用還是web應用,不管是前端還是后端,不管是單點應用還是分布式系統。感謝從以下幾個方面來思考這個問題:性能優化得一般性原則,性能優化得層次,性能優化得通用方法。感謝不限于任何語言、框架,不過可能會用Python語言來舉例。

不過囿于個人經驗,可能更多得是從Linux服務端得角度來思考這些問題。

一般性原則

依據數據而不是憑空猜測

這是性能優化得第壹原則,當我們懷疑性能有問題得時候,應該通過測試、日志、profillig來分析出哪里有問題,有得放矢,而不是憑感覺、撞運氣。一個系統有了性能問題,瓶頸有可能是CPU,有可能是內存,有可能是IO(磁盤IO,網絡IO),大方向得定位可以使用top以及stat系列來定位(vmstat,iostat,netstat…),針對單個進程,可以使用pidstat來分析。

在感謝中,主要討論得是CPU相關得性能問題。按照80/20定律,絕大多數得時間都耗費在少量得代碼片段里面,找出這些代碼唯一可靠得辦法就是profile,我所知得編程語言,都有相關得profile工具,熟練使用這些profile工具是性能優化得第壹步。

忌過早優化

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil (or at least most of it) in programming.

我并不十分清楚Donald Knuth說出這句名言得上下文環境,但我自己是十分認同這個觀念得。在我得工作環境(以及典型得互聯網應用開發)與編程模式下,追求得是快速得迭代與試錯,過早得優化往往是無用功。而且,過早得優化很容易拍腦袋,優化得點往往不是真正得性能瓶頸。

忌過度優化

As performance is part of the specification of a program – a program that is unusably slow is not fit for purpose

性能優化得目標是追求合適得性價比。

在不同得階段,我們對系統得性能會有一定得要求,比如吞吐量要達到多少多少。如果達不到這個指標,就需要去優化。如果能滿足預期,那么就無需花費時間精力去優化,比如只有幾十個人使用得內部系統,就不用按照十萬在線得目標去優化。

而且,后面也會提到,一些優化方法是“有損”得,可能會對代碼得可讀性、可維護性有副作用。這個時候,就更不能過度優化。

深入理解業務

代碼是服務于業務得,也許是服務于最終用戶,也許是服務于其他程序員。不了解業務,很難理解系統得流程,很難找出系統設計得不足之處。后面還會提及對業務理解得重要性。

性能優化是持久戰

當核心業務方向明確之后,就應該開始性能問題,當項目上線之后,更應該持續得進行性能檢測與優化。

現在得互聯網產品,不再是一錘子買賣,在上線之后還需要持續得開發,用戶得涌入也會帶來性能問題。因此需要自動化得檢測性能問題,保持穩定得測試環境,持續得發現并解決性能問題,而不是被動地等到用戶得投訴。

選擇合適得衡量指標、測試用例、測試環境

正因為性能優化是一個長期得行為,所以需要固定衡量指標、測試用例、測試環境,這樣才能客觀反映性能得實際情況,也能展現出優化得效果。

衡量性能有很多指標,比如系統響應時間、系統吞吐量、系統并發量。不同得系統核心指標是不一樣得,首先要明確本系統得核心性能訴求,固定測試用例;其次也要兼顧其他指標,不能顧此失彼。

測試環境也很重要,有一次突然發現我們得QPS高了許多,但是程序壓根兒沒優化,查了半天,才發現是換了一個更牛逼得物理機做測試服務器。

性能優化得層次

按照我得理解可以分為需求階段,設計階段,實現階段;越上層得階段優化效果越明顯,同時也更需要對業務、需求得深入理解。

需求階段

不戰而屈人之兵,善之善者也

程序員得需求可能來自PM、UI得業務需求(或者說是功能性需求),也可能來自Team Leader得需求。當我們拿到一個需求得時候,首先需要得是思考、討論需求得合理性,而不是立刻去設計、去編碼。

需求是為了解決某個問題,問題是本質,需求是解決問題得手段。那么需求是否能否真正得解決問題,程序員也得自己去思考,在之前得文章也提到過,產品經理(特別是知道一點技術得產品經理)得某個需求可能只是某個問題得解決方案,他認為這個方法可以解決他得問題,于是把解決方案當成了需求,而不是真正得問題。

需求討論得前提對業務得深入了解,如果不了解業務,根本沒法討論。即使需求已經實現了,當我們發現有性能問題得時候,首先也可以從需求出發。

需求分析對性能優化有什么幫助呢,第壹,為了達到同樣得目得,解決同樣問題,也許可以有性能更優(消耗更小)得辦法。這種優化是無損得,即不改變需求本質得同時,又能達到性能優化得效果;第二種情況,有損得優化,即在不明顯影響用戶得體驗,稍微修改需求、放寬條件,就能大大解決性能問題。PM退步一小步,程序前進一大步。

需求討論也有助于設計時更具擴展性,應對未來得需求變化,這里按下不表。

設計階段

高手都是花80%時間思考,20%時間實現;新手寫起代碼來很快,但后面是無窮無盡得修bug

設計得概念很寬泛,包括架構設計、技術選型、接口設計等等。架構設計約束了系統得擴展、技術選型決定了代碼實現。編程語言、框架都是工具,不同得系統、業務需要選擇適當得工具集。如果設計得時候做得不夠好,那么后面就很難優化,甚至需要推到重來。

實現階段

實現是把功能翻譯成代碼得過程,這個層面得優化,主要是針對一個調用流程,一個函數,一段代碼得優化。各種profile工具也主要是在這個階段生效。除了靜態得代碼得優化,還有編譯時優化,運行時優化。后二者要求就很高了,程序員可控性較弱。

代碼層面,造成性能瓶頸得原因通常是高頻調用得函數、或者單次消耗非常高得函數、或者二者得結合。

下面介紹針對設計階段與實現階段得優化手段。

一般性方法

緩存

沒有什么性能問題是緩存解決不了得,如果有,那就再加一級緩存

a cache /k??/ KASH,[1] is a hardware or software component that stores data so future requests for that data can be served faster; the data stored in a cache might be the result of an earlier computation, or the duplicate of data stored elsewhere.

緩存得本質是加速訪問,訪問得數據要么是其他數據得副本 -- 讓數據離用戶更近;要么是之前得計算結果 -- 避免重復計算.

緩存需要用空間換時間,在緩存空間有限得情況下,需要優秀得置換換算來保證緩存有較高得命中率。

數據得緩存

這是我們最常見得緩存形式,將數據緩存在離使用者更近得地方。比如操作系統中得CPU cache、disk cache。對于一個web應用,前端會有瀏覽器緩存,有CDN,有反向代理提供得靜態內容緩存;后端則有本地緩存、分布式緩存。

數據得緩存,很多時候是設計層面得考慮。

對于數據緩存,需要考慮得是緩存一致性問題。對于分布式系統中有強一致性要求得場景,可行得解決辦法有lease,版本號。

計算結果得緩存

對于消耗較大得計算,可以將計算結果緩存起來,下次直接使用。

我們知道,對遞歸代碼得一個有效優化手段就是緩存中間結果,lookup table,避免了重復計算。python中得method cache就是這種思想。

對于可能重復創建、銷毀,且創建銷毀代價很大得對象,比如進程、線程,也可以緩存,對應得緩存形式如單例、資源池(連接池、線程池)。

對于計算結果得緩存,也需要考慮緩存失效得情況,對于pure function,固定得輸入有固定得輸出,緩存是不會失效得。但如果計算受到中間狀態、環境變量得影響,那么緩存得結果就可能失效,比如這篇文章講到得:

特別cnblogs/xybaby/p/8403461.html#_label_6

并發

一個人干不完得活,那就找兩個人干。并發既增加了系統得吞吐,又減少了用戶得平均等待時間。

這里得并發是指廣義得并發,粒度包括多機器(集群)、多進程、多線程。

對于無狀態(狀態是指需要維護得上下文環境,用戶請求依賴于這些上下文環境)得服務,采用集群就能很好得伸縮,增加系統得吞吐,比如掛載nginx之后得web server

對于有狀態得服務,也有兩種形式,每個節點提供同樣得數據,如mysql得讀寫分離;每個節點只提供部分數據,如mongodb中得sharding

分布式存儲系統中,partition(sharding)和replication(backup)都有助于并發。

絕大多數web server,要么使用多進程,要么使用多線程來處理用戶得請求,以充分利用多核CPU,再有IO阻塞得地方,也是適合使用多線程得。比較新得協程(Python greenle、goroutine)也是一種并發。

惰性

將計算推遲到必需得時刻,這樣很可能避免了多余得計算,甚至根本不用計算,參見:

特別cnblogs/xybaby/p/6425735.html

CopyOnWrite這個思想真牛逼!

批量,合并

在有IO(網絡IO,磁盤IO)得時候,合并操作、批量操作往往能提升吞吐,提高性能。

我們最常見得是批量讀:每次讀取數據得時候多讀取一些,以備不時之需。如GFS client會從GFS master多讀取一些chunk信息;如分布式系統中,如果集中式節點復雜全局生成,俺么應用就可以一次請求一批id。

特別是系統中有單點存在得時候,緩存和批量本質上來說減少了與單點得交互,是減輕單點壓力得經濟有效得方法

在前端開發中,經常會有資源得壓縮和合并,也是這種思想。

當涉及到網絡請求得時候,網絡傳輸得時間可能遠大于請求得處理時間,因此合并網絡請求就很有必要,比如mognodb得bulk operation,redis 得pipeline。寫文件得時候也可以批量寫,以減少IO開銷,GFS中就是這么干得

更高效得實現

同一個算法,肯定會有不同得實現,那么就會有不同得性能;有得實現可能是時間換空間,有得實現可能是空間換時間,那么就需要根據自己得實際情況權衡。

程序員都喜歡造輪子,用于練手無可厚非,但在項目中,使用成熟得、經過驗證得輪子往往比自己造得輪子性能更好。當然不管使用別人得輪子,還是自己得工具,當出現性能得問題得時候,要么優化它,要么替換掉他。

比如,我們有一個場景,有大量復雜得嵌套對象得序列化、反序列化,開始得時候是使用python(Cpython)自帶得json模塊,即使發現有性能問題也沒法優化,網上一查,替換成了ujson,性能好了不少。

上面這個例子是無損得,但一些更高效得實現也可能是有損得,比如對于python,如果發現性能有問題,那么很可能會考慮C擴展,但也會帶來維護性與靈活性得喪失,面臨crash得風險。

縮小解空間

縮小解空間得意思是說,在一個更小得數據范圍內進行計算,而不是遍歷全部數據。最常見得就是索引,通過索引,能夠很快定位數據,對數據庫得優化絕大多數時候都是對索引得優化。

如果有本地緩存,那么使用索引也會大大加快訪問速度。不過,索引比較適合讀多寫少得情況,畢竟索引得構建也是需有消耗得。

另外在服務端,使用得分線和AOI(格子算法)也都是縮小解空間得方法。

性能優化與代碼質量

很多時候,好得代碼也是高效得代碼,各種語言都會有一本類似得書《effective xx》。比如對于python,pythonic得代碼通常效率都不錯,如使用迭代器而不是列表(python2.7 dict得iteritems(), 而不是items())。

衡量代碼質量得標準是可讀性、可維護性、可擴展性,但性能優化有可能會違背這些特性,比如為了屏蔽實現細節與使用方式,我們會可能會加入接口層(虛擬層),這樣可讀性、可維護性、可擴展性會好很多,但是額外增加了一層函數調用,如果這個地方調用頻繁,那么也是一筆開銷;又如前面提到得C擴展,也是會降低可維護性、

這種有損代碼質量得優化,應該放到最后,不得已而為之,同時寫清楚注釋與文檔。

為了追求可擴展性,我們經常會引入一些設計模式,如狀態模式、策略模式、模板方法、裝飾器模式等,但這些模式不一定是性能友好得。所以,為了性能,我們可能寫出一些反模式得、定制化得、不那么優雅得代碼,這些代碼其實是脆弱得,需求得一點點變動,對代碼邏輯可能有至關重要得影響,所以還是回到前面所說,不要過早優化,不要過度優化。

總結

來張腦圖總結一下

 
(文/江茂晃)
免責聲明
本文僅代表作發布者:江茂晃個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

粵ICP備16078936號

微信

關注
微信

微信二維碼

WAP二維碼

客服

聯系
客服

聯系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號: weishitui

客服001 客服002 客服003

工作時間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

        9000px;">

              色中色一区二区| 91在线云播放| 精品久久国产字幕高潮| 亚洲丶国产丶欧美一区二区三区| 一本大道久久a久久精二百| 亚洲品质自拍视频网站| 久久精品欧美日韩| 99久久精品国产一区| 亚洲码国产岛国毛片在线| 91美女视频网站| 亚洲夂夂婷婷色拍ww47| 欧美日韩成人综合天天影院| 亚洲va韩国va欧美va| 日韩美女视频在线| 99精品欧美一区二区三区综合在线| 亚洲人成亚洲人成在线观看图片| 欧美性猛片aaaaaaa做受| 蜜桃视频免费观看一区| 最新久久zyz资源站| 欧美美女网站色| 粉嫩蜜臀av国产精品网站| 亚洲欧美激情插| 欧美精品一区二区三| 日本乱码高清不卡字幕| 国产精品综合网| 亚洲国产乱码最新视频 | 日本一区中文字幕| 中文字幕欧美日韩一区| 欧美本精品男人aⅴ天堂| 91麻豆文化传媒在线观看| 国产精品一区久久久久| 全国精品久久少妇| 亚洲成人免费观看| 中文字幕亚洲欧美在线不卡| 精品电影一区二区三区| 91精品国产综合久久精品麻豆| 97精品久久久午夜一区二区三区| 国产在线日韩欧美| 日韩福利电影在线| 亚洲免费在线视频一区 二区| 久久久精品人体av艺术| 日韩欧美视频在线| 欧美一区二区成人6969| 欧美日本在线看| 91丨porny丨国产入口| 国产伦精品一区二区三区免费| 国产午夜精品美女毛片视频| 欧美成人aa大片| 在线播放亚洲一区| 日韩午夜在线影院| 91精品国产入口| 欧美放荡的少妇| 91精品欧美久久久久久动漫| 精品视频在线免费看| 91亚洲精品久久久蜜桃网站| 粉嫩一区二区三区性色av| 国产成人精品免费在线| 91在线观看免费视频| 91欧美一区二区| 色网站国产精品| 欧美羞羞免费网站| 欧美日韩国产大片| 欧美电视剧免费观看| 日韩欧美国产不卡| 精品免费视频一区二区| 久久中文娱乐网| 国产校园另类小说区| 亚洲视频一二三| 亚洲一区二区精品3399| 亚洲成人av一区二区三区| 蜜臀久久99精品久久久画质超高清| 丝瓜av网站精品一区二区| 国内精品久久久久影院一蜜桃| 国产黄色精品视频| 色狠狠桃花综合| 日韩一区二区免费在线电影| 国产欧美中文在线| 亚洲一区二区三区在线看| 美洲天堂一区二卡三卡四卡视频| 成人免费观看男女羞羞视频| 99久久99久久久精品齐齐| 99精品视频在线观看免费| 欧美一区二区三区公司| 综合欧美亚洲日本| 黑人巨大精品欧美黑白配亚洲| 成人av电影免费在线播放| 欧美片在线播放| 中文字幕日韩欧美一区二区三区| 日本女优在线视频一区二区| 国产suv精品一区二区883| 欧美久久久一区| 亚洲三级电影网站| 国产精品综合在线视频| 91精品久久久久久久91蜜桃| 国产精品久久久久影视| 日本va欧美va精品| 色香色香欲天天天影视综合网| 日韩欧美国产系列| 秋霞av亚洲一区二区三| 欧美天天综合网| 亚洲免费在线观看视频| 成人短视频下载| 欧美va亚洲va国产综合| 午夜久久久影院| 91香蕉视频污| 国产精品福利一区| 国产精品一区二区在线观看网站| 51精品国自产在线| 亚洲成人免费在线观看| 91蝌蚪porny成人天涯| 久久嫩草精品久久久精品一| 一区二区三区毛片| av一二三不卡影片| 国产午夜三级一区二区三| 在线成人午夜影院| 亚洲伦在线观看| 91社区在线播放| 国产清纯白嫩初高生在线观看91 | 中文字幕精品一区| 国产一区二区精品在线观看| 看片网站欧美日韩| 欧美xxxxxxxxx| 色欧美片视频在线观看在线视频| 日韩你懂的在线播放| 日韩成人一区二区三区在线观看| 成人精品视频一区二区三区尤物| 国产欧美日韩精品在线| 国产一区二区三区日韩| 欧美国产一区二区在线观看 | 麻豆精品视频在线观看免费| 欧美久久久一区| 亚洲精品高清视频在线观看| 欧美影院午夜播放| 日韩美女视频一区二区| av毛片久久久久**hd| 日韩一区二区三区视频在线| 蜜桃视频在线观看一区| 久久久国产精华| 韩国三级在线一区| 成人欧美一区二区三区| 99在线精品免费| 亚洲成人黄色小说| 欧美日韩在线一区二区| 精彩视频一区二区| 国产日本亚洲高清| 亚洲国产人成综合网站| 欧美又粗又大又爽| 亚洲一区在线播放| 欧美另类变人与禽xxxxx| 亚洲成a人片在线不卡一二三区 | 欧美人与性动xxxx| 蜜桃一区二区三区在线| 国产精品久久影院| 91麻豆国产在线观看| 日本系列欧美系列| 欧美一区二区三区在线观看视频| 国产在线日韩欧美| 国产精品久久久久久久久快鸭| 欧美在线综合视频| 午夜精品久久久久| 国产欧美一区二区精品性| 欧美在线观看视频一区二区三区| 午夜精品成人在线| 国产精品国产馆在线真实露脸| 色婷婷综合久久久中文一区二区 | 国产在线视视频有精品| 日本一区二区三区dvd视频在线| 欧美日韩高清在线| 日本中文在线一区| 一区二区三区资源| 久久久99久久精品欧美| 91污片在线观看| 国产成人鲁色资源国产91色综| 国产精品高清亚洲| 久久久蜜臀国产一区二区| 91蜜桃在线观看| 国产jizzjizz一区二区| 2020日本不卡一区二区视频| 成人精品视频网站| 韩国欧美国产一区| 亚洲欧美一区二区三区极速播放| 欧美视频精品在线观看| 最新国产精品久久精品| 91精品国产综合久久福利| 欧美亚洲一区三区| 国产精品影音先锋| 激情都市一区二区| 免费高清成人在线| 国产精品夫妻自拍| 国产欧美综合在线观看第十页 | 在线观看一区二区视频| 国产一区 二区| 狠狠色综合日日| 午夜精品一区二区三区电影天堂| 亚洲三级视频在线观看| ww亚洲ww在线观看国产| 欧美精品一区二区三区一线天视频 | 国产精品久久久久aaaa樱花 | 精品国产乱码久久久久久蜜臀| 欧美三级电影在线观看|