Pārlūkot izejas kodu

Memory optimizations for direct mode

tags/v1.0.4^2
9seconds 6 gadus atpakaļ
vecāks
revīzija
4ebae693e0
1 mainītis faili ar 13 papildinājumiem un 2 dzēšanām
  1. 13
    2
      proxy/direct.go

+ 13
- 2
proxy/direct.go Parādīt failu

@@ -13,6 +13,15 @@ import (
13 13
 
14 14
 const directPipeBufferSize = 1024 * 1024
15 15
 
16
+var (
17
+	directPipePool = sync.Pool{
18
+		New: func() interface{} {
19
+			rv := make([]byte, directPipeBufferSize)
20
+			return &rv
21
+		},
22
+	}
23
+)
24
+
16 25
 func directConnection(request *protocol.TelegramRequest) error {
17 26
 	telegramConnRaw, err := obfuscated2.TelegramProtocol(request)
18 27
 	if err != nil {
@@ -42,8 +51,10 @@ func directPipe(dst io.WriteCloser, src io.ReadCloser, wg *sync.WaitGroup, logge
42 51
 		wg.Done()
43 52
 	}()
44 53
 
45
-	buf := make([]byte, directPipeBufferSize)
46
-	if _, err := io.CopyBuffer(dst, src, buf); err != nil {
54
+	buf := directPipePool.Get().(*[]byte)
55
+	defer directPipePool.Put(buf)
56
+
57
+	if _, err := io.CopyBuffer(dst, src, *buf); err != nil {
47 58
 		logger.Debugw("Cannot pump sockets", "error", err)
48 59
 	}
49 60
 }

Notiek ielāde…
Atcelt
Saglabāt