仅支持Go 1.18及以上版本, 因为泛型的原因。
批处理一组元素,或者等待一定的时间。
一旦元素达到设定的阈值,就进行处理,否则调用者就阻塞等待。
如果没有充足的元素需要处理,那么会把既有的元素处理完毕后继续等待.
如果设置了timeout,即使还没有达到设定的阈值,也会进行批处理。
使用这个库既可以避免CPU的无谓空转,也可以有效的进行成批数据的处理。
in := make(chan int, 100)
go func() {
for {
// 往in中塞数据
......
}
}()
Batch(in, 80, func(items []int) {
// 处理一批数据
})