用golang开发系统软件的一些细节( 九 )


需要额外注意两点:

  • 一个大的struct数组,要注意字节对齐带来的不必要消耗 。内存敏感的话,调整字段的顺序以节约空间 。
  • 一个大的struct数组,可以故意加些padding的字段,然item尽可能的按照cache line的长度对齐,可以提升访问性能 。
分支预测优化这种优化点很难找 。
关于分支预测的案例,可以看看我写的这个分析文章:《用重复写入代替if判断,减少程序分支》
golang标准库中也有个很好的例子:《How does ConstantTimeByteEq work?》
一个简单的if x==y,考虑了攻击者对计算时间的猜测,考虑了分支预测的损耗 。
其他的关于分支预测的优化技巧,这篇也不错:《浅谈利用分支预测提高效率》
在日常的开发中,换个写法是有可能会提高性能的:
switch variable{  case "a":    // 根据业务特点,把最可能的分支放在最前 。提高分支预测的成功率     // do something  case "b":     // do something}OK,文章到这里就结束了 。
本人也才写了两年的golang,难免有很多错误之处,还请读者不吝赐教,谢谢!
【用golang开发系统软件的一些细节】

经验总结扩展阅读