go程式優化

2021-09-10 09:08:43 字數 554 閱讀 6082

1、記憶體優化

d、長呼叫棧避免申請較多的臨時物件

goroutine的呼叫棧預設大小是4k(1.7修改為2k),採用連續棧機制,當棧空間不夠時,go runtime會自動擴容:

當棧空間不夠時,按2倍增加,原有棧的變數會直接copy到新的棧空間,變數指標指向新的空間位址;退棧會釋放棧空間的占用,gc時發現棧空間占用不到1/4時,則棧空間減少一半。比如棧的最終大小2m,則極端情況下,就會有10次的擴棧操作,會帶來效能下降。因此,建議控制呼叫棧和函式的複雜度,不要在乙個goroutine做完所有邏輯;如的確需要長呼叫棧,而考慮goroutine池化,避免頻繁建立goroutine帶來棧空間的變化。

e、避免頻繁建立臨時物件

go在gc時會引發stop the world,即整個情況暫停。go1.8最壞情況下gc為100us。但暫停時間還是取決於臨時物件的個數,臨時物件數量越多,暫停時間可能越長,並消耗cpu。因此,建議gc優化方式是盡可能地減少臨時物件的個數:盡量使用區域性變數;所多個區域性變數合併乙個大的結構體或陣列,減少掃瞄物件的次數,一次回盡可能多的記憶體。

2、併發優化

3、其它優化

go基礎程式

package main 程式所屬包,必須位於 第一行 import 匯入依賴包 const 定義常量 var 全域性變數的宣告和賦值 type int 一般型別宣告 type struct 結構宣告 type inte ce 宣告介面 func 函式定義 func main package是最基本...

Go 效能優化技巧 2 10

對於一些初學者,自知道 go 裡面的 array 以 pass by value 方式傳遞後,就莫名地引起 恐慌 外加諸多文章未作說明,就建議用 slice 代替 array,企圖避免資料拷貝,提公升效能。實際上,此做法有待商榷。某些時候怕會適得其反,倒造成不必要的效能損失。用個簡單的示例說明。pa...

Go 效能優化技巧 8 10

儘管反射 reflect 存在效能問題,但依然被頻繁使用,以彌補靜態語言在動態行為上的不足。只是某些時候,我們須對此做些變通,以提公升效能。為便於閱讀,以下示例均做了最大程度精簡。如果是 reflect.type,可將其快取,避免重複操作耗時。但 value 顯然不行,因為它和具體物件繫結,內部儲存...