1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package main
-
- type Task struct {
- ID string
- Payload interface{}
- }
-
- type TaskCallback func(Task) error
-
- type JobPool struct {
- // pools 线程池大小
- pools int
- // tasks 任务列表
- tasks chan Task
- // callback 执行任务的具体函数
- callback TaskCallback
- // result 执行结果标志位
- result chan int
- }
-
- // NewJobPool 生成默认的 Job 池
- func NewJobPool() *JobPool {
- return &JobPool{
- pools: 10,
- tasks: make(chan Task, 100),
- result: make(chan int),
- }
- }
-
- // Push 添加任务
- func (t *JobPool) Push(task Task) {
- t.tasks <- task
- }
-
- // Callback 设置 Callback
- func (t *JobPool) Callback(f TaskCallback) {
- t.callback = f
- }
-
- // Start 启动 Job 服务
- func (t *JobPool) Start() {
- for i := 0; i < t.pools; i += 1 {
- go func() {
- for {
- task := <-t.tasks
- t.callback(task)
-
- t.result <- 1
- }
- }()
- }
- }
-
- func (t *JobPool) Done(total int) {
- cursor := 0
- if total < 1 {
- return
- }
-
- for {
- <-t.result
- cursor += 1
-
- if cursor >= total {
- break
- }
- }
- }
|