https://github.com/xuesongtao/taskpool
支持预分配协程和用多少申请多少 分配的协程都有一个生命周期,生命周期到了会被自动回收 协程池最少有一个哨兵协程,最多有 maxWork + 1(哨兵) 如果要关闭协程池需要手动释放, 异常情况时会自动释放
https://github.com/xuesongtao/taskpool
block-pool go-pool taskpool
Last synced: 5 months ago
JSON representation
支持预分配协程和用多少申请多少 分配的协程都有一个生命周期,生命周期到了会被自动回收 协程池最少有一个哨兵协程,最多有 maxWork + 1(哨兵) 如果要关闭协程池需要手动释放, 异常情况时会自动释放
- Host: GitHub
- URL: https://github.com/xuesongtao/taskpool
- Owner: xuesongtao
- License: mit
- Created: 2022-04-17T07:55:56.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2025-06-12T02:14:35.000Z (about 1 year ago)
- Last Synced: 2025-06-12T03:27:14.290Z (about 1 year ago)
- Topics: block-pool, go-pool, taskpool
- Language: Go
- Homepage:
- Size: 138 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
#### 1. 介绍
* 支持预分配协程和用多少申请多少
* 分配的协程都有一个生命周期,生命周期到了会被自动回收
* 协程池最少有一个哨兵协程,最多有 maxWork + 1(哨兵)
* 如果要关闭协程池需要手动释放, 异常情况时会自动释放
#### 2. 使用
```go
go get -u gitee.com/xuesongtao/taskpool
```
```go
pushPool := lib.NewTaskPool("poolName", 10, lib.WithProGoWorker())
defer pushPool.SafeClose() // 局部使用需要使用这个进行 Close()
everyTaskHandleSum := 500
l := 50000
pushIds := []string{xxx}
totalPage := math.Ceil(float64(l) / float64(everyTaskHandleSum))
for page := 1; page <= int(totalPage); page++ {
// 根据切片分页
startIndex, endIndex := lib.GetPapeSliceIndex(int32(page), int32(everyTaskHandleSum), l)
tmpArr := pushIds[startIndex:endIndex]
i.log.Infof("startIndex: %d, endIndex: %d, total: %d", startIndex, endIndex, l)
// 阻塞式
pushPool.Submit(func() {
i.PushBatchMsg(tmpArr, info)
})
}
```
- 其他: 在使用时需要注意闭包引用问题, 在 `_example` 下添加使用示例
#### 最后
* 欢迎大佬们指正, 希望大佬给 **star**