Merge pull request #587 from tamird/perf

transport: allocate bigger slabs and reuse
This commit is contained in:
Qi Zhao
2016-04-04 11:30:38 -07:00

View File

@ -313,16 +313,22 @@ func (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream)) {
readerDone := make(chan struct{}) readerDone := make(chan struct{})
go func() { go func() {
defer close(readerDone) defer close(readerDone)
for {
buf := make([]byte, 1024) // TODO: minimize garbage, optimize recvBuffer code/ownership // TODO: minimize garbage, optimize recvBuffer code/ownership
const readSize = 8196
for buf := make([]byte, readSize); ; {
n, err := req.Body.Read(buf) n, err := req.Body.Read(buf)
if n > 0 { if n > 0 {
s.buf.put(&recvMsg{data: buf[:n]}) s.buf.put(&recvMsg{data: buf[:n:n]})
buf = buf[n:]
} }
if err != nil { if err != nil {
s.buf.put(&recvMsg{err: mapRecvMsgError(err)}) s.buf.put(&recvMsg{err: mapRecvMsgError(err)})
return return
} }
if len(buf) == 0 {
buf = make([]byte, readSize)
}
} }
}() }()