slice是否可以去掉在某些情况下的copy动作 #1150
Replies: 1 comment
-
2.1 bfe中调用相关函数的情况 2.2 ReadLine() 2.3 readContinuedLineSlice() 2.4 结论 |
Beta Was this translation helpful? Give feedback.
-
2.1 bfe中调用相关函数的情况 2.2 ReadLine() 2.3 readContinuedLineSlice() 2.4 结论 |
Beta Was this translation helpful? Give feedback.
-
在学习源码的过程中,有一个疑惑:
bfe_net/textproto/reader.go 文件中
func (r *Reader) ReadLineBytes() ([]byte, error) {
line, err := r.readLineSlice()
if line != nil {
buf := make([]byte, len(line))
copy(buf, line)
line = buf
}
return line, err
}
为何要重新copy源数据呢,像这种ReadLineBytes方法一般都使用在单goroutine中,有一种情况下会出现问题:就是取了一部分数据后,在没有使用数据的情况下,又去取数据,有概率的会改变掉上次取出还未使用的数据,但这种情况是少数,在使用时可以自行处理,大都数情况下都不需要copy到新的slice中,减少gc压力
这是个人的看法,可能有地方没分析到,麻烦你们指点一下
Beta Was this translation helpful? Give feedback.
All reactions