開源軟體推薦丨ants——Go 語言的高性能協程池

開源軟件推薦丨ants——Go 語言的高性能協程池

關注開源中國OSC頭條號,獲取最新技術資訊


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", 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\n", ants.Running())
fmt.Printf("finish all tasks.\n")
// 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\n", p.Running())
fmt.Printf("finish all tasks, result is %d\n", sum)

開源中國旨在為中國IT技術人員提供一個全面的、快捷更新的用來檢索開源軟件以及交流使用開源經驗的平臺,目前已收錄45000多款開源軟件。關注開源中國OSC頭條號,每日獲取開源軟件推薦,點擊“瞭解更多”閱讀原文,獲取ants的詳細介紹與下載地址。


分享到:


相關文章: