golang work pool
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)
}
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的值
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
})
}
err := wp.Wait()
if err != nil {
fmt.Println(err)
}
fmt.Println("down")
}
相關文章
- Android workAndroid
- work 10月
- golang原始碼分析:sync.Pool 如何從讀寫加鎖到無鎖Golang原始碼
- large pool
- RabbitMQ-Work模式MQ模式
- MySQL-workbench not workMySql
- queue:work 原理分析
- Hystrix Thread Pool 解析thread
- DUBBO Thread pool is EXHAUSTED!thread
- 共享池 shared pool
- oracle stream pool sizeOracle
- How Logs Work On MySQL With InnoDB TablesMySql
- Project Management - 2) Estimate Your WorkProject
- [CF932E]Team Work
- misdirection靶機work_through
- LamPiao靶機work_throughLAMP
- Oracle Shared Pool Memory ManagementOracle
- (翻譯) How i work - Taylor Otwell
- RabbitMQ(二)JavaClient SpringBoot整合 Work queuesMQJavaclientSpring Boot
- RabbitMQ學習筆記-Work QueuesMQ筆記
- WPF Backgroundworker dowork work completed progress changed
- How does an Electric Motor work? (DC Motor)
- 簡介我的 Git Work FlowGit
- ALTER SYSTEM FLUSH BUFFER_POOL
- PostgreSQL DBA(167) - pgAdmin(config:work_mem)SQL
- sx-work網路繫結IP
- sync.pool 原始碼閱讀原始碼
- z-index does not work in Internet Explorer with pdf in iframeIndex
- [work] 一階 二階馬爾可夫馬爾可夫
- Codeforces Global Round 11 C. The Hard Work of Paparazzi
- 在 Android 上使用協程(三) :Real WorkAndroid
- Source Code Reading for Vue 3: How does `hasChanged` work?Vue
- RabbitMQ 入門案例 - Work 模式 - 輪詢模式MQ模式
- kthread_worker和kthread_work機制thread
- centos 16安裝PHP7.0 異常 No pool defined. at least one pool section must be specified in config fileCentOSPHPAST
- Python程式專題4:程式池PoolPython
- docker筆記43-ceph pool管理Docker筆記
- JVM常量池Constant pool結構速查JVM