feat: manage receive buffer using sync.Pool

This commit is contained in:
ydajiang
2025-04-19 15:21:28 +08:00
parent bedf402ab4
commit 2d1cd874f4
13 changed files with 124 additions and 119 deletions

View File

@@ -1,9 +1,28 @@
package stream
const (
ReceiveBufferUdpBlockCount = 300
import "sync"
ReceiveBufferTCPBlockCount = 50
const (
UDPReceiveBufferSize = 1500
TCPReceiveBufferSize = 4096 * 20
UDPReceiveBufferQueueSize = 1000
TCPReceiveBufferQueueSize = 50
)
// 后续考虑使用cas队列实现
var (
UDPReceiveBufferPool = sync.Pool{
New: func() any {
return make([]byte, UDPReceiveBufferSize)
},
}
TCPReceiveBufferPool = sync.Pool{
New: func() any {
return make([]byte, TCPReceiveBufferSize)
},
}
)
// ReceiveBuffer 收流缓冲区. 网络收流->解析流->封装流->发送流是同步的,从解析到发送可能耗时,从而影响读取网络流. 使用收流缓冲区,可有效降低出现此问题的概率.
@@ -38,11 +57,3 @@ func (r *ReceiveBuffer) BlockCount() int {
func NewReceiveBuffer(blockSize, blockCount int) *ReceiveBuffer {
return &ReceiveBuffer{blockCapacity: blockSize, blockCount: blockCount, data: make([]byte, blockSize*blockCount), index: 0}
}
func NewUDPReceiveBuffer() *ReceiveBuffer {
return NewReceiveBuffer(1500, ReceiveBufferUdpBlockCount)
}
func NewTCPReceiveBuffer() *ReceiveBuffer {
return NewReceiveBuffer(4096*20, ReceiveBufferTCPBlockCount)
}