Golang中降本增效的常规实践( 二 )


磁盘:1.寻址:ms(毫秒) 2.磁盘带宽[1]:MB/s
内存:1.寻址:ns(纳秒) 2. 内存带宽[2]:GB/s
磁盘比内存在寻址上慢了10W倍,传输带宽上慢了20倍 。
开源的带缓冲区的logrus日志写入hook[3],就利用了bufio技术 。
// 利用bufio针对原始io.Writer封装成带缓冲区的io.Writer`s.writer = bufio.NewWriterSize(s.Writer, size)......if len(bs) > s.writer.Available() && s.writer.Buffered() > 0 {if err := s.writer.Flush(); err != nil {return err}}_, err = s.writer.Write(bs)`优化总结

  • sync.Pool 复用临时对象,减少内存分配和gc次数
  • bufio利用缓冲区,减少笨重的系统调用
  • 其实就是“降本增效”的体现 。
引用链接[1] 磁盘带宽: https://it.sohu.com/a/580279682_121118998
[2] 内存带宽: https://baike.baidu.com/item/内存带宽
[3] 带缓冲区的logrus日志写入hook: https://Github.com/zwbdzb/logrus-bufferedWriter-hook




推荐阅读