性能测试:ArrayBlockingQueue vs. Go channel

测试方案:

  1. 主线程将一个 Integer 对象发到 Channel 0
  2. 线程 i 将对象从 Channel i 不断搬运到 Channel i+1
  3. 最后一个线程从 Channel N-1 中拿到对象,做加和

为了保证公平,Go 中自行封装一个 Integer 而不是用 int 型;考虑到实际中大多数情况下 channel 里走的都是对象而非基本类型,这样是合理的。

发现二者完成时间基本都在 3.8s ~ 4.0s 之间,可以说没有差异。 ArrayBlockingQueue 的性能看来还是很高的。

PS. 尝试了容量不限的 ListBlockingQueue,时间在 5s 左右,也还可以接受。

测试代码在这里