ants——Go語言的高效能協程池
ants 詳細介紹
github主頁:https://github.com/panjf2000/ants
ants是一個高效能的協程池,實現了對大規模goroutine的排程管理、goroutine複用,允許使用者在開發併發程式的時候限制協程數量,複用資源,達到更高效執行任務的效果。
功能
1. 實現了自動排程併發的goroutine,複用goroutine
2. 提供了友好的介面:任務提交、獲取執行中的協程數量、動態調整協程池大小
3. 資源複用,極大節省記憶體使用量;在大規模批量併發任務場景下比原生goroutine併發具有更高的效能
使用
寫 go 併發程式的時候如果程式會啟動大量的 goroutine ,勢必會消耗大量的系統資源(記憶體,CPU),通過使用 ants,可以例項化一個協程池,複用 goroutine ,節省資源,提升效能:
package main
import (
"fmt"
"sync"
"sync/atomic"
"github.com/panjf2000/ants"
"time"
)
var sum int32
func myFunc(i interface{}) error {
n := i.(int)
atomic.AddInt32(&sum, int32(n))
fmt.Printf("run with %d
", n)
return nil
}
func demoFunc() error {
time.Sleep(10 * time.Millisecond)
fmt.Println("Hello World!")
return nil
}
func main() {
runTimes := 1000
// use the common pool
var wg sync.WaitGroup
for i := 0; i < runTimes; i++ {
wg.Add(1)
ants.Submit(func() error {
demoFunc()
wg.Done()
return nil
})
}
wg.Wait()
fmt.Printf("running goroutines: %d
", ants.Running())
fmt.Printf("finish all tasks.
")
// use the pool with a function
// set 10 the size of goroutine pool
p, _ := ants.NewPoolWithFunc(10, func(i interface{}) error {
myFunc(i)
wg.Done()
return nil
})
// submit tasks
for i := 0; i < runTimes; i++ {
wg.Add(1)
p.Serve(i)
}
wg.Wait()
fmt.Printf("running goroutines: %d
", p.Running())
fmt.Printf("finish all tasks, result is %d
", sum)
}
本文來自雲棲社群合作伙伴“開源中國”
本文作者:達爾文
相關文章
- ants - 目前開源最優的協程池
- go 語言連線池Go
- Go 語言的演化歷程Go
- Go語言的演化歷程Go
- go語言實戰課程《Go語言開發分散式任務排程 輕鬆搞定高效能Crontab》——推薦分享Go分散式
- go ants原始碼分析Go原始碼
- 《Go 語言程式設計》讀書筆記 (五) 協程與通道Go程式設計筆記
- 《快學 Go 語言》第 11 課 —— 千軍萬馬跑協程Go
- go語言高效能快取元件ccache分析Go快取元件
- go語言編譯過程概述Go編譯
- Swoole 協程與 Go 協程的區別Go
- Swoole協程與Go協程的區別Go
- Go語言排程器之主動排程(20)Go
- Go語言 如何配製 高效能sql.DBGoSQL
- Go語言實現HTTPS加密協議GoHTTP加密協議
- 【轉】使用 Go 語言讀寫 Redis 協議GoRedis協議
- python 協程與go協程的區別PythonGo
- Go語言排程器之排程main goroutine(14)GoAI
- Go語言————1、初識GO語言Go
- 非常棒的一門GO語言實戰課程《高併發&高效能 Go語言開發企業級抽獎專案》——推薦連結分享Go
- Mix XWP V1.1 - Go 通用動態協程池 WorkerPoolGo
- 教你在 C 語言上編寫自己的協程
- Go語言goroutine排程器初始化Go
- golang協程池設計Golang
- 技術實踐——教你用100行寫一個 go 的協程池 (任務池)!!!Go
- 非常適合GO語言新手學習的《Go語言從入門到實戰——簡明高效的Go語言實戰指南》課程——推薦分享Go
- go語言的介面Go
- Go語言的”坑“Go
- GO語言Go
- 理解 Go 中的協程(Goroutine)Go
- Go 併發 -- 協程Go
- Go實戰準備工作---建立協程池和定時任務Go
- GO語言————2、GO語言環境安裝Go
- go語言與c語言的相互呼叫GoC語言
- Go語言排程器之盜取goroutine(17)Go
- Golang協程池(workpool)實現Golang
- Go 語言高效能影像處理神器 h2non/bimgGo
- Go_go語言初探Go