xmh19936688 / go-dispatcher

go-dispatcher用于将需要处理的数据分发到协程执行,可控制最大并发量

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

go-dispatcher

go-dispatcher用于将需要处理的数据分发到协程执行,可控制最大并发量。

使用go-dispatcher之前:

type T struct{}

func main() {
	wg := &sync.WaitGroup{}
	ch := make(chan T)

	go dispatch(ch, wg)

	wg.Add(len(list))
	for _, data := range list { ch <- data }
	wg.Wait()
}

func dispatch(ch chan T, wg *sync.WaitGroup) {
	for i := 0; i < maxCurrency; i++ {
		go func() {
			for {
				handler(<-ch)
				wg.Done()
			}
		}()
	}
}

func handler(data T) {
	// do sth with data
}

使用go-dispatcher之后:

// go get github.com/xmh19936688/go-dispatcher
import "github.com/xmh19936688/go-dispatcher/dispatcher"

type T struct{}

func main() {
	wg := &sync.WaitGroup{}
	ch := make(chan T)

	d := dispatcher.New[T]().MaxCurrency(-1).
		Handler(handler).Chan(ch).WaitGroup(wg)
	go d.Start()

	wg.Add(len(list))
	for _, data := range list {ch <- data}
	wg.Wait()
}

func handler(data T) {
	// do sth with data
}

About

go-dispatcher用于将需要处理的数据分发到协程执行,可控制最大并发量

License:Apache License 2.0


Languages

Language:Go 100.0%