码迷,mamicode.com
首页 > 其他好文 > 详细

Go 性能优化技巧 9/10

时间:2016-05-06 16:16:40      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

作为内置类型,通道(channel)从运行时得到很多支持,其自身设计也算得上精巧。但不管怎么说,它本质上依旧是一种队列,当多个 goroutine 并发操作时,免不了要使用锁。某些时候,这种竞争机制,会导致性能问题。

下面是一个简单利用 channel 收发数据的示例,为便于 “准确” 测量收发操作性能,我们将 make channel 操作放到外部,尽可能避免额外消耗。

技术分享

在研究 go runtime 源码实现过程中,会看到大量利用 “批操作” 来提升性能的样例。在此,我们可借鉴一下,看看效果对比。

技术分享
技术分享
技术分享

从测试结果看,性能提升很高,可见批操作是一种有效方案。

就此例而言,是否可以使用 slice 代替 array 块?直观上,slice 可减少通过 channel 传递的数据大小,减少数据复制,似乎可进一步提升性能。不妨做个测试。

技术分享
技术分享
技术分享

其结果和前面某章类似,slice 非但没有提升性能,反而在堆上分配了更多内存,有些得不偿失。当然,这个案例未必就是绝对的,所有的性能提升都需依照具体上下文来分析。

最新动态,请扫码关注
技术分享

Go 性能优化技巧 9/10

标签:

原文地址:http://blog.csdn.net/q_yuhen/article/details/51314318

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!