Random Thoughts
Recent content on Random Thoughts
马上订阅 Random Thoughts RSS 更新: https://blog.joway.io/index.xml
Golang for-range 内部实现
2021年1月20日 08:00
最近在写一个编解码的功能时发现使用 Golang for-range
会存在很大的性能问题。
假设我们现在有一个 Data
类型表示一个数据包,我们从网络中获取到了 [1024]Data
个数据包,此时我们需要对其进行遍历操作。一般我们会使用 for-i++ 或者 for-range 两种方式遍历,如下代码:
type Data [256]byte
func BenchmarkForStruct(b *testing.B) {
var items [1024]Data
var result Data
for i := 0; i < b.N; i++ {
for k := 0; k < len(items); k++ {
result = items[k]
}
}
_ = result
}
func BenchmarkRangeStruct(b *testing.B) {
var items [1024]Data
var result Data
for i := 0; i < b.N; i++ {
for _,...
剩余内容已隐藏
查看完整文章以阅读更多
Random Thoughts
Recent content on Random Thoughts
马上订阅 Random Thoughts RSS 更新: https://blog.joway.io/index.xml
Golang for-range 内部实现
2021年1月20日 08:00
最近在写一个编解码的功能时发现使用 Golang for-range
会存在很大的性能问题。
假设我们现在有一个 Data
类型表示一个数据包,我们从网络中获取到了 [1024]Data
个数据包,此时我们需要对其进行遍历操作。一般我们会使用 for-i++ 或者 for-range 两种方式遍历,如下代码:
type Data [256]byte
func BenchmarkForStruct(b *testing.B) {
var items [1024]Data
var result Data
for i := 0; i < b.N; i++ {
for k := 0; k < len(items); k++ {
result = items[k]
}
}
_ = result
}
func BenchmarkRangeStruct(b *testing.B) {
var items [1024]Data
var result Data
for i := 0; i < b.N; i++ {
for _,...
剩余内容已隐藏
查看完整文章以阅读更多