由于写磁盘是一个耗时高的操作,在高并发场景中直接写磁盘是不可取的,会严重影响服务性能,可能会导致服务不可用、进程夯死等。那能不能写到内存中?然后异步写磁盘。答案是可以的,但是如果在高并发场景中,还有一个问题, 写磁盘协程在写的过程,其他协程都得要用等它写完,那这又变成了串行操作。那能不能有两块内存?写完一个,再写另外一个,写满的内存被异步刷到磁盘?可以的,这就是double-buffer。
- double_buffer.go 文件包含double-buffer 基础数据结构,能在一般高并发场景中使用
- double_buffer_set.go 文件包含基于基础数据结构,引入了分片,降低了锁粒度,每次随机获取double-buffer,达到负载均衡。
- double-buffer 本质是两块内存,写完一个,再写另一个。
- 分片处理,降低了锁力度,极大的提高了处理能力,写磁盘和写内存能并发进行。