国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

GO語(yǔ)言自底向上優(yōu)化

這篇具有很好參考價(jià)值的文章主要介紹了GO語(yǔ)言自底向上優(yōu)化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Go Ballast(通過(guò)嘗試降低 GC 頻率以提高整體性能,針對(duì)所有 Go應(yīng)用都適用)

首先我們明白GO語(yǔ)言GC觸發(fā)條件是由比例來(lái)觸發(fā)的。例如,當(dāng)前存活內(nèi)存10GB,觸發(fā)比例是100%,因此下次觸發(fā)GC的時(shí)候是當(dāng)內(nèi)存達(dá)到20GB的時(shí)候觸發(fā)GC。這種機(jī)制在當(dāng)前小內(nèi)存的情況下會(huì)平凡觸發(fā)GC,例如當(dāng)前只有1GC的話則內(nèi)存達(dá)到2GB就要觸發(fā)GC。而單純提高比例到1000%,那么下次觸發(fā)GC的時(shí)候?qū)嶋H上內(nèi)存已經(jīng)有較大的壓力。所以,我們采用Ballast機(jī)制。

Ballast機(jī)制在小內(nèi)存的時(shí)候會(huì)申請(qǐng)一些內(nèi)存,已達(dá)到延緩下一次GC的時(shí)間。具體的,也就一行代碼:

// allocate 2GB ballast which resident in virtual memory only
ballastObject := make([]byte,1024*1024*1024*2)

首先,內(nèi)存是在續(xù)存中分配,所以實(shí)際上我們是申請(qǐng)了這塊內(nèi)存但沒(méi)映射到物理內(nèi)存。

假設(shè)除 Ballast 以外的存活對(duì)象總大小為X字節(jié)(平均值),Ballast 對(duì)象大小為 B字節(jié)
1.Ballat 最多會(huì)帶來(lái)大約 B 字節(jié)的額外物理內(nèi)存使用(值得注意的是,這部分多占用的物理內(nèi)存依然是被除 Ballast 以外的對(duì)象所使用,不存在浪費(fèi)問(wèn)題,Ballast 本身僅僅存在于虛擬內(nèi)存中,不會(huì)被實(shí)際地映射物理頁(yè)面)
2 Ballast能帶來(lái)性能優(yōu)化的根本原因是降低了GC頻率

根據(jù)1得到:不管大內(nèi)存還是小內(nèi)存場(chǎng)景,Ballast 都會(huì)額外帶來(lái)最大為 B 字節(jié)的物理內(nèi)存使用。
根據(jù)2得到:在大內(nèi)存場(chǎng)景即X比較大時(shí),一般來(lái)說(shuō)此時(shí) GC頻率會(huì)比較小,所以 Ballast帶來(lái)的優(yōu)化效果不會(huì)像 X 為較小值時(shí)那么明顯。

那么這樣做在清理內(nèi)存是否會(huì)占用更多時(shí)間?

答案:不會(huì)。GC主要是mark 和sweep。其中sweep速度很快,幾乎不暫用時(shí)間。在mark階段由于Ballast不是存活對(duì)像,所以不會(huì)被掃描到,因此幾乎也不占用時(shí)間。


CPUWorker(嘗試給 Go 帶來(lái)一個(gè)類似內(nèi)核 CFS 調(diào)度器的 goroutime 調(diào)度器,以通過(guò)其提供的優(yōu)先級(jí)機(jī)制保證關(guān)鍵goroutine 的延遲指標(biāo),目前還沒(méi)有在TiDB中嘗試 應(yīng)用,Demo效果很好).

在linux中的調(diào)度算法采用CFS算法。CFS算法在休眠進(jìn)程在喚醒時(shí)會(huì)獲得vruntime的補(bǔ)償(減少vruntime,提高這個(gè)進(jìn)程優(yōu)先級(jí)),它在醒來(lái)的時(shí)候有能力搶占CPU是大概率事件,這也是CFS調(diào)度算法的本意,即保證交互式進(jìn)程的響應(yīng)速度,因?yàn)榻换ナ竭M(jìn)程等待用戶輸入會(huì)頻繁休眠。

  • 計(jì)算密集型作業(yè)將運(yùn)行很長(zhǎng)時(shí)間,因此它將優(yōu)先級(jí)放后;
  • I/O密集型作業(yè)會(huì)運(yùn)行很短的時(shí)間,因此它只會(huì)稍微放后移動(dòng);

而goruntime調(diào)度器采用的是RR方式。這對(duì)IO密集型作業(yè)很不友好,交互式進(jìn)程交互能力差。

解決方式:

1,使用CGO。但是CGO執(zhí)行write的時(shí)候?qū)?huì)導(dǎo)致大內(nèi)存復(fù)制。

2,再來(lái)一個(gè)并行的GOruntime實(shí)例進(jìn)程。將go library編譯成CGO.so文件,然后通過(guò)我們GO的CGO來(lái)調(diào)用這個(gè).so文件。所以這時(shí)候其實(shí)是有兩個(gè)隔開(kāi)的進(jìn)程也就是兩個(gè)GMP模型,所以原來(lái)的程序和這個(gè)IO密集型的.so文件的程序是不會(huì)互相影響的。

3,使用CPU worker。

https://docs.google.com/document/d/1g5SgpMg28XyMFdPTVMrZrZiLFBfAIgW8sMEXkKEQTzE/edit文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-653076.html


到了這里,關(guān)于GO語(yǔ)言自底向上優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包