最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

高性能是什么?其本質(zhì)是什么東東?

2023-06-25 11:35 作者:heardic  | 我要投稿

高性能涉及的東西有很多,該怎么才能記住呢?

我覺得這是一個很有代表性的問題,相信很多人都有類似的困惑,所以決定寫篇文章來好好聊聊這個問題。

確實是這樣,當(dāng)初在準(zhǔn)備高性能相關(guān)的面試問題時,也是同樣的感受,有好多東西啊,該想個什么辦法把它們都串起來呢?

計算機運行的本質(zhì),或者說程序執(zhí)行的本質(zhì),就是CPU不斷取出內(nèi)存中的指令,然后執(zhí)行它。

在這個過程中,CPU需要與內(nèi)存打交道,因為程序指令在這里面;還需要與硬盤、網(wǎng)卡等一些外部設(shè)備打交道,存儲數(shù)據(jù)、傳輸數(shù)據(jù)。

CPU、內(nèi)存、外部設(shè)備,這三個是計算機最主要的三個東西,所以我們在思考高性能的問題時,圍繞這三個東西,就可以把很多技術(shù)串起來。

1、讓CPU執(zhí)行指令更快一點

程序是CPU在執(zhí)行,最容易想到的當(dāng)然就是讓CPU跑的更快一些。這方面主要是涉及硬件技術(shù),跟軟件關(guān)系不大。

比如提高CPU主頻、指令流水線技術(shù)、亂序執(zhí)行、分支預(yù)測等等。

2、使用緩存

程序運行經(jīng)常需要讀取和加載數(shù)據(jù),當(dāng)程序經(jīng)常需要從一個慢速設(shè)備讀取數(shù)據(jù)時,性能勢必會受到影響。所以,可以先把數(shù)據(jù)緩存到一個能快速獲取的地方,加快數(shù)據(jù)加載速度,然后選擇適當(dāng)?shù)臅r機來更新緩存中的數(shù)據(jù)。

緩存技術(shù)在計算機中無處不在,CPU中有存放數(shù)據(jù)和指令的一二三級緩存,還有存放內(nèi)存地址翻譯的TLB緩存。

操作系統(tǒng)中的文件系統(tǒng)管理硬盤數(shù)據(jù)也使用了頁緩存Page Cache。

后端服務(wù)為了快速獲取數(shù)據(jù),使用Redis/Memcache作為內(nèi)存數(shù)據(jù)緩存,避免每次都從數(shù)據(jù)庫中查詢。

瀏覽器中為了加快渲染速度,也有前端資源的緩存,避免每次都找網(wǎng)站服務(wù)器請求。

網(wǎng)站服務(wù)器為了提高響應(yīng)速度,也有CDN緩存。

3、減少CPU被打斷次數(shù)

CPU在運行過程中不是一直埋頭執(zhí)行程序,它時不時的會被打斷,這就是中斷。

最典型的就是網(wǎng)絡(luò)數(shù)據(jù)包處理,如果在很大網(wǎng)絡(luò)流量下,網(wǎng)卡每來一個數(shù)據(jù)包都通過中斷告訴CPU,那CPU一天別干活了,煩都要煩死了。

所以Linux內(nèi)核中的NAPI技術(shù)通過輪詢網(wǎng)卡,減少中斷次數(shù)就能顯著提高性能。

另外DMA技術(shù)通過把數(shù)據(jù)傳輸?shù)墓ぷ魍獍鋈?,解放CPU,也是這一思想的應(yīng)用。

4、減少內(nèi)存拷貝

很多時候,程序需要頻繁拷貝數(shù)據(jù),但拷貝數(shù)據(jù)的過程時比較耗時的,如果能減少拷貝的次數(shù),無疑會提高程序性能。

比如內(nèi)存映射、零拷貝技術(shù)就屬于這一類技術(shù)。

另外高性能抓包技術(shù)DPDK,讓應(yīng)用程序直接讀取網(wǎng)卡,減少數(shù)據(jù)拷貝也是這種思想的體現(xiàn)。

5、并行與并發(fā)

這個思想很直接,一個人干活忙不過來,那就多找?guī)讉€人一起干。并行與并發(fā)的思想同樣在計算機領(lǐng)域無處不在。

如CPU的多核技術(shù),超線程技術(shù)、單指令多數(shù)據(jù)技術(shù)SIMD等。

多線程技術(shù)、NUMA技術(shù)、多節(jié)點負(fù)載均衡技術(shù)等。

后端服務(wù)開發(fā)中的I/O多路復(fù)用技術(shù)(select/poll/epoll)。

6、減少鎖的競爭

前面提到多線程技術(shù),而提到多線程就離不開鎖。很多時候,線程在鎖的競爭上浪費了太多時間,上下文的切換這些都需要有開銷。

所以減少鎖的競爭也是提高性能的一種方式,這方面的技術(shù)有原子操作、無鎖編程等。

7、資源池化技術(shù)

很多程序運行啟動時就預(yù)先分配好資源,而不是在需要的時候才去分配,這也是一種提高性能的方法。最常見的有線程池、內(nèi)存池。

8、減少I/O次數(shù)

程序運行的時候經(jīng)常要從硬盤上讀取數(shù)據(jù),而這類操作是非常耗時的,如果能減少I/O的次數(shù),合并I/O次數(shù),對性能的提升將是巨大的。

體現(xiàn)這類思想的技術(shù)有B+樹、SQL批量執(zhí)行等。

9、良好的數(shù)據(jù)結(jié)構(gòu)與算法

程序的靈魂是數(shù)據(jù)結(jié)構(gòu)與算法,前面說了那么多,即便都做到了,但如果你的數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計的一塌糊涂那也是白搭。

良好的數(shù)據(jù)結(jié)構(gòu)與算法能夠從根本上解決高性能的問題。

這方面思想的體現(xiàn)有哈希表、B+樹、跳表等。

總結(jié)

上面這幾個點不是孤立存在的,很多時候都是互相交織在一起的綜合應(yīng)用。比如零拷貝技術(shù),既是減少內(nèi)存拷貝的思想,也是減少打擾CPU的思想。在I/O多路復(fù)用epoll中,既是并發(fā)思想體現(xiàn),也有減少內(nèi)存拷貝思想的體現(xiàn)。

最后來總結(jié)一下,下次回答提高性能可以從四個增加、四個減少、一個良好來展開:

增加CPU速度、增加緩存、增加并行度、增加資源池

減少內(nèi)存拷貝、減少I/O次數(shù)、減少CPU被打斷次數(shù)、減少鎖競爭

良好的數(shù)據(jù)結(jié)構(gòu)與算法

本文使用 文章同步助手 同步

高性能是什么?其本質(zhì)是什么東東?的評論 (共 條)

分享到微博請遵守國家法律
巴中市| 宝山区| 高青县| 什邡市| 德阳市| 海晏县| 宜州市| 都江堰市| 丹巴县| 博爱县| 江西省| 长海县| 富锦市| 泊头市| 白玉县| 双辽市| 赞皇县| 青川县| 常州市| 内江市| 镇远县| 马边| 双辽市| 万盛区| 松溪县| 启东市| 和顺县| 斗六市| 萨迦县| 南投市| 昌乐县| 勐海县| 铜梁县| 汤阴县| 连平县| 乐平市| 老河口市| 抚州市| 舒城县| 汝城县| 乳山市|