有时候批量积攒一批数据集中处理,是一个高效的提高程序性能的方法,比如我们可以批量写入数据库,批量发送消息到kafka,批量写入网络数据等等。批量把数据收集出来,我们常用channel类型,此时channel的功能就是一个buffer,多个生产者把数据写入到channel中,消费者从channel中读取数据,但是Go的channel并没有提供批量读取的方法,我们需要自己实现一个。ithub.com/smallnest/exp/chanx 库当然我已经实现了一个batch库,你可以直接拿来用,本文主要介绍它的功能、使用方法以及设计原理和考量:github.com/smallnest/exp/chanx。我们可以使用这个库的Batch方法来批量读取数据,它的定义如下:1funcBatch[T any](ctx context.Context, ch <-chanT, batchSizeint, fnfunc([]T))第一个参数是Context,可以让调用者主动取消或者超时控制第二个参数是channel,我们从这个channel中读取数据。channel可以在外部被关闭第三个参数是批处理的大小,也就是我们从channel中读取一批数据的最大量第四个参数是一个函数,我们把从channel中读取的一批数据传递给这个函数,由这个函数来处理这批数据举一个例子:123456789101112131
...
继续阅读
(71)