Lab0
我们需要实现一个Reader和一个Writer,它们都继承自ByteStream类,Reader可以从ByteStream里面读取数据,Writer可以向ByteStream里面写入数据
ByteStream有一个容量限制,如果Writer写入的数据长度超过了容量限制,那么多余的数据就直接丢弃了
实现
手写一个循环队列,用vector<char>来承载这个循环队列
效果
在我的虚拟机上:
措施 | 吞吐量 |
---|---|
平凡的实现 | 0.52 Gbit/s |
减少取模 | 无明显变化 |
peek的时候尽可能返回长的字符串 | 3.95 Gbit/s |
优化
- 在循环队列的实现中少用取模
- Reader进行peek的时候
- 如果循环队列为空,那么返回一个空的string_view
- 如果循环队列的front和back满足front<back,那么就认为可以直接把从front这个位置开始,长度为back-front的这一段字串打包返回,即:
string_view(&queue[front],back-front)
- 否则返回从front这个位置开始,长度为capacity-front的这一段字串打包返回,即:
string_view(&queue[front],capacity-front)