<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
之前寫了一篇 grpool goroutine池詳解 | 協程管理 收到了大家積極的反饋,今天這篇來做一下grpool的效能測試分析,讓大家更好的瞭解什麼場景下使用grpool比較好。
grpool相比於goroutine更節省記憶體,但是耗時更長;
原因也很簡單:grpool複用了協程,減少了協程的建立和銷燬,減少了記憶體消耗;也因為協程的複用,總的goroutine數量更少,導致耗時更多。
開啟for迴圈,開啟一萬個協程,分別使用原生goroutine和grpool執行。
看兩者在記憶體佔用和耗時方面的差別。
package main import ( "flag" "fmt" "github.com/gogf/gf/os/grpool" "github.com/gogf/gf/os/gtime" "log" "os" "runtime" "runtime/pprof" "sync" "time" ) func main() { //接收命令列引數 flag.Parse() //cpu分析 cpuProfile() //主邏輯 //demoGrpool() demoGoroutine() //記憶體分析 memProfile() } func demoGrpool() { start := gtime.TimestampMilli() wg := sync.WaitGroup{} for i := 0; i < 10000; i++ { wg.Add(1) _ = grpool.Add(func() { var m runtime.MemStats runtime.ReadMemStats(&m) fmt.Printf("執行中佔用記憶體:%d Kbn", m.Alloc/1024) time.Sleep(time.Millisecond) wg.Done() }) fmt.Printf("執行的協程:", grpool.Size()) } wg.Wait() fmt.Printf("執行的時間:%v ms n", gtime.TimestampMilli()-start) select {} } func demoGoroutine() { //start := gtime.TimestampMilli() wg := sync.WaitGroup{} for i := 0; i < 10000; i++ { wg.Add(1) go func() { //var m runtime.MemStats //runtime.ReadMemStats(&m) //fmt.Printf("執行中佔用記憶體:%d Kbn", m.Alloc/1024) time.Sleep(time.Millisecond) wg.Done() }() } wg.Wait() //fmt.Printf("執行的時間:%v ms n", gtime.TimestampMilli()-start) } var cpuprofile = flag.String("cpuprofile", "", "write cpu profile `file`") var memprofile = flag.String("memprofile", "", "write memory profile to `file`") func cpuProfile() { if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { log.Fatal("could not create CPU profile: ", err) } if err := pprof.StartCPUProfile(f); err != nil { //監控cpu log.Fatal("could not start CPU profile: ", err) } defer pprof.StopCPUProfile() } } func memProfile() { if *memprofile != "" { f, err := os.Create(*memprofile) if err != nil { log.Fatal("could not create memory profile: ", err) } runtime.GC() // GC,獲取最新的資料資訊 if err := pprof.WriteHeapProfile(f); err != nil { // 寫入記憶體資訊 log.Fatal("could not write memory profile: ", err) } f.Close() } }
元件 | 佔用記憶體 | 耗時 |
---|---|---|
grpool | 2229 Kb | 1679 ms |
goroutine | 5835 Kb | 1258 ms |
goframe的grpool節省記憶體,如果機器的記憶體不高或者業務場景對記憶體佔用的要求更高,則使用grpool。
如果機器的記憶體足夠,但是對應用的執行時間有更高的追求,就用原生的goroutine。
更多關於GoFrame效能測試grpool使用場景的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45