Mix XWP V1.1 - Go 通用動態協程池 WorkerPool
OpenMix 出品:https://openmix.org
Mix XWP
通用的工作池
A common worker pool
Github
Installation
go get github.com/mix-go/xwp
Usage
先建立一個結構體用來處理任務,使用型別斷言轉換任務資料型別,例如:i := data.(int)
type Foo struct {
}
func (t *Foo) Do(data interface{}) {
// do something
}
排程任務
- 也可以使用
RunF
採用閉包來處理任務 - 如果不想阻塞執行,可以使用
p.Start()
啟動
jobQueue := make(chan interface{}, 200)
p := &xwp.WorkerPool{
JobQueue: jobQueue,
MaxWorkers: 1000,
InitWorkers: 100,
MaxIdleWorkers: 100,
RunI: &Foo{},
}
go func() {
// 投放任務
for i := 0; i < 10000; i++ {
jobQueue <- i
}
// 投放完停止排程
p.Stop()
}()
p.Run() // 阻塞等待
異常處理:Do
方法中執行的程式碼,可能會出現 panic
異常,我們可以通過 recover
獲取異常資訊記錄到日誌或者執行其他處理
func (t *Foo) Do(data interface{}) {
defer func() {
if err := recover(); err != nil {
// handle error
}
}()
// do something
}
檢視 Workers
的執行狀態:通常可以使用一個定時器,定時列印或者告警處理
go func() {
ticker := time.NewTicker(1000 * time.Millisecond)
for {
<-ticker.C
log.Printf("%+v", p.Stat()) // 2021/04/26 14:32:53 &{Active:5 Idle:95 Total:100}
}
}()
License
Apache License Version 2.0, http://www.apache.org/licenses/
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- ants——Go語言的高效能協程池Go
- Mix PHP V2 例項:協程池非同步郵件傳送守護程式PHP非同步
- golang協程池設計Golang
- Swoole協程與Go協程的區別Go
- Swoole 協程與 Go 協程的區別Go
- python 協程與go協程的區別PythonGo
- Go實戰準備工作---建立協程池和定時任務Go
- Go 併發 -- 協程Go
- 技術實踐——教你用100行寫一個 go 的協程池 (任務池)!!!Go
- 清華尹成帶你實戰GO案例(1) Go 狀態協程Go
- Golang協程池(workpool)實現Golang
- Mix PHP V2 新特性:協程、定時器PHP定時器
- Go程式設計模式三—Fan-Out模式與協程池結合Go程式設計設計模式
- Go中協程死鎖Go
- 理解 Go 中的協程(Goroutine)Go
- 大話狀態協程
- ants - 目前開源最優的協程池
- 基於 swoole 協程的 MySQL 連線池MySql
- Go實戰-基於Go協程和channel的使用Go
- Go 併發程式設計 - runtime 協程排程(三)Go程式設計
- 看別個的協程池自己練了下
- [譯] part23: 緩衝channel和協程池
- 【深入理解Go】協程設計與排程原理(上)Go
- 【深入理解Go】協程設計與排程原理(下)Go
- go 協程初體驗 [模擬使用者執行緒池,處理 50 個任務 jobs]Go執行緒
- Go 多協程記錄執行結果Go
- 通用元件:自動更新套件的使用過程元件套件
- 如何追蹤Go動態Go
- 動態選路協議協議
- Laravel 裡面用swoole的協程go報錯 ?LaravelGo
- 動態執行緒池(DynamicTp)之動態調整Tomcat、Jetty、Undertow執行緒池引數篇執行緒TomcatJetty
- Go語言排程器之主動排程(20)Go
- 學習之路 / goroutine 併發協程池設計及實現Go
- go 任務池Go
- Go中協程間通訊的方式Sync.CondGo
- Go | Go 結合 Consul 實現動態反向代理Go
- Go實戰準備工作---建立攜程池和定時任務Go
- GO GMP協程排程實現原理 5w字長文史上最全Go