简易 Golang 协程并发任务库
import "github.com/minph/pool"
package main
import (
"fmt"
"github.com/minph/pool"
)
func main() {
p := pool.New(10)
data := make(chan string)
go p.Start(func(app *pool.App, index int) {
msg := fmt.Sprintf("这是协程%v", index)
data <- msg
})
for !p.Done() {
msg := <-data
fmt.Println(msg)
}
}
也可以使用封装程度更高的 API
package main
import (
"fmt"
"github.com/minph/pool"
)
func main() {
p := pool.New(10)
data := make(chan string)
p.Run(func(app *pool.App, index int) {
msg := fmt.Sprintf("这是协程%v", index)
data <- msg
}, func(app *pool.App) {
msg := <-data
fmt.Println(msg)
})
}
- type App
- func New(routine int) *App
- func (a *App) After(afterFunc AppFunc) *App
- func (a *App) Before(beforeFunc AppFunc) *App
- func (a *App) Counter() int
- func (a *App) Done() bool
- func (a *App) OnceDone(onceDoneFunc AppFunc) *App
- func (a *App) Run(runFunc RunFunc, waitFunc AppFunc) *App
- func (a *App) SetTask(from, to int) *App
- func (a *App) Start(doFunc RunFunc) *App
- func (a *App) Task(index int) (int, int)
- type AppFunc
- type RunFunc
type App
type App struct {
// 协程总数
Routine int
// contains filtered or unexported fields
}
App 协程池本体
func New
func New(routine int) *App
New 创建协程池
func (*App) After
func (a *App) After(afterFunc AppFunc) *App
After 设置任务结束后执行函数
func (*App) Before
func (a *App) Before(beforeFunc AppFunc) *App
Before 设置任务开启前执行函数
func (*App) Counter
func (a *App) Counter() int
Counter 获取剩余协程数
func (*App) Done
func (a *App) Done() bool
Done 判断是否结束所有协程
func (*App) OnceDone
func (a *App) OnceDone(onceDoneFunc AppFunc) *App
OnceDone 设置任一协程结束时触发函数
func (*App) Run
func (a *App) Run(runFunc RunFunc, waitFunc AppFunc) *App
Run 运行协程
func (*App) SetTask
func (a *App) SetTask(from, to int) *App
SetTask 设置任务区间
func (*App) Start
func (a *App) Start(doFunc RunFunc) *App
Start 开启协程
func (*App) Task
func (a *App) Task(index int) (int, int)
Task 获取子任务区间
type AppFunc
type AppFunc func(a *App)
AppFunc 协程开关函数
type RunFunc
type RunFunc func(a *App, index int)
RunFunc 协程运行时函数