golang workpool,工作池,執行緒池
## [gowp](https://github.com/xxjwxc/gowp)
## golang worker pool ,執行緒池 , 工作池
- 併發限制goroutine池。
- 限制任務執行的併發性,而不是排隊的任務數。
- 無論排隊多少任務,都不會阻止提交任務。
- 通過佇列支援
- golang 工作池公共庫
### 支援最大任務數, 放到工作池裡面 並等待全部完成
```
package main
import (
"fmt"
"time"
"github.com/xxjwxc/gowp/workerpool"
)
func main() {
wp := workerpool.New(10) //設定最大執行緒數
for i := 0; i < 20; i++ { //開啟20個請求
ii := i
wp.Do(func() error {
for j := 0; j < 10; j++ { //每次列印0-10的值
fmt.Println(fmt.Sprintf("%v->\t%v", ii, j))
time.Sleep(1 * time.Second)
}
//time.Sleep(1 * time.Second)
return nil
})
}
wp.Wait()
fmt.Println("down")
}
```
### 支援錯誤返回
```
package main
import (
"fmt"
"time"
"github.com/xxjwxc/gowp/workerpool"
)
func main() {
wp := workerpool.New(10) //設定最大執行緒數
for i := 0; i < 20; i++ { //開啟20個請求
ii := i
wp.Do(func() error {
for j := 0; j < 10; j++ { //每次列印0-10的值
fmt.Println(fmt.Sprintf("%v->\t%v", ii, j))
if ii == 1 {
return errors.Cause(errors.New("my test err")) //有err 立即返回
}
time.Sleep(1 * time.Second)
}
return nil
})
}
err := wp.Wait()
if err != nil {
fmt.Println(err)
}
fmt.Println("down")
}
```
### 支援判斷是否完成 (非阻塞)
```
package main
import (
"fmt"
"time"
"github.com/xxjwxc/gowp/workerpool"
)
func main() {
wp := workerpool.New(5) //設定最大執行緒數
for i := 0; i < 10; i++ { //開啟20個請求
// ii := i
wp.Do(func() error {
for j := 0; j < 5; j++ { //每次列印0-10的值
//fmt.Println(fmt.Sprintf("%v->\t%v", ii, j))
time.Sleep(1 * time.Second)
}
return nil
})
fmt.Println(wp.IsDone())
}
wp.Wait()
fmt.Println(wp.IsDone())
fmt.Println("down")
}
```
### 支援同步等待結果
```
package main
import (
"fmt"
"time"
"github.com/xxjwxc/gowp/workerpool"
)
func main() {
wp := workerpool.New(5) //設定最大執行緒數
for i := 0; i < 10; i++ { //開啟20個請求
ii := i
wp.DoWait(func() error {
for j := 0; j < 5; j++ { //每次列印0-10的值
fmt.Println(fmt.Sprintf("%v->\t%v", ii, j))
// if ii == 1 {
// return errors.New("my test err")
// }
time.Sleep(1 * time.Second)
}
return nil
//time.Sleep(1 * time.Second)
//return errors.New("my test err")
})
}
err := wp.Wait()
if err != nil {
fmt.Println(err)
}
fmt.Println("down")
}
```
程式碼地址:[gowp](https://github.com/xxjwxc/gowp)
[喜歡請給星](https://github.com/xxjwxc/gowp)
相關文章
- Golang協程池(workpool)實現Golang
- Java執行緒池二:執行緒池原理Java執行緒
- 淺談執行緒池(上):執行緒池的作用及CLR執行緒池執行緒
- 執行緒池的工作流程執行緒
- 執行緒池執行緒
- 淺談執行緒池(中):獨立執行緒池的作用及IO執行緒池執行緒
- Java面試必問之執行緒池的建立使用、執行緒池的核心引數、執行緒池的底層工作原理Java面試執行緒
- golang 限流器,控制併發,執行緒池Golang執行緒
- java執行緒池趣味事:這不是執行緒池Java執行緒
- 執行緒池以及四種常見執行緒池執行緒
- 記憶體池、程式池、執行緒池記憶體執行緒
- 執行緒池是怎樣工作的?執行緒
- java執行緒池-工作佇列workQueueJava執行緒佇列
- 執行緒池 execute() 的工作邏輯執行緒
- 執行緒池與工作佇列(轉)執行緒佇列
- 執行緒和執行緒池執行緒
- 多執行緒【執行緒池】執行緒
- 執行緒 執行緒池 Task執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 執行緒池管理(1)-為什麼需要執行緒池執行緒
- 執行緒池 Executor執行緒
- Java執行緒池Java執行緒
- java 執行緒池Java執行緒
- 再聊執行緒池執行緒
- 執行緒池原理執行緒
- Ruby執行緒池執行緒
- Java多執行緒——執行緒池Java執行緒
- Python執行緒池與程式池Python執行緒
- 程式池、執行緒池效率測試執行緒
- 執行緒與執行緒池的那些事之執行緒池篇(萬字長文)執行緒
- 執行緒池之ThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- 執行緒池之ScheduledThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- 原始碼|從序列執行緒封閉到物件池、執行緒池原始碼執行緒物件
- java多執行緒9:執行緒池Java執行緒
- 二. 執行緒管理之執行緒池執行緒
- kuangshenshuo-多執行緒-執行緒池執行緒
- 執行緒的建立及執行緒池執行緒
- JavaThread多執行緒執行緒池Javathread執行緒