This commit is contained in:
邹宗楠
2023-05-29 16:49:57 +08:00
parent 958ab4686d
commit d626fcf12d
3 changed files with 51 additions and 110 deletions

View File

@@ -1,48 +1,49 @@
package event
import (
"fmt"
"sync"
)
type SimplePool struct {
wg sync.WaitGroup
work chan func() //任务队列
}
func NewSimplePoll(workers int) *SimplePool {
p := &SimplePool{
wg: sync.WaitGroup{},
work: make(chan func()),
}
p.wg.Add(workers)
//根据指定的并发量去读取管道并执行
for i := 0; i < workers; i++ {
go func() {
defer func() {
// 捕获异常 防止waitGroup阻塞
if err := recover(); err != nil {
fmt.Println(err)
p.wg.Done()
}
}()
// 从workChannel中取出任务执行
for fn := range p.work {
fn()
}
p.wg.Done()
}()
}
return p
}
// 添加任务
func (p *SimplePool) Add(fn func()) {
p.work <- fn
}
// 执行
func (p *SimplePool) Run() {
close(p.work)
p.wg.Wait()
}
//
//import (
// "fmt"
// "sync"
//)
//
//type SimplePool struct {
// wg sync.WaitGroup
// work chan func() //任务队列
//}
//
//func NewSimplePoll(workers int) *SimplePool {
// p := &SimplePool{
// wg: sync.WaitGroup{},
// work: make(chan func()),
// }
// p.wg.Add(workers)
// //根据指定的并发量去读取管道并执行
// for i := 0; i < workers; i++ {
// go func() {
// defer func() {
// // 捕获异常 防止waitGroup阻塞
// if err := recover(); err != nil {
// fmt.Println(err)
// p.wg.Done()
// }
// }()
// // 从workChannel中取出任务执行
// for fn := range p.work {
// fn()
// }
// p.wg.Done()
// }()
// }
// return p
//}
//
//// 添加任务
//func (p *SimplePool) Add(fn func()) {
// p.work <- fn
//}
//
//// 执行
//func (p *SimplePool) Run() {
// close(p.work)
// p.wg.Wait()
//}