Merge pull request #587 from tamird/perf
transport: allocate bigger slabs and reuse
This commit is contained in:
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user