mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03:00 
			
		
		
		
	reduce allocations (also pulls in updated ironwood to do the same)
This commit is contained in:
		
							parent
							
								
									52709696a5
								
							
						
					
					
						commit
						8b5add5301
					
				
					 4 changed files with 24 additions and 5 deletions
				
			
		
							
								
								
									
										2
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
										
									
									
									
								
							| 
						 | 
					@ -3,7 +3,7 @@ module github.com/yggdrasil-network/yggdrasil-go
 | 
				
			||||||
go 1.19
 | 
					go 1.19
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	github.com/Arceliar/ironwood v0.0.0-20230515022317-31b976732ebe
 | 
						github.com/Arceliar/ironwood v0.0.0-20230521173602-97ee6b09b8e0
 | 
				
			||||||
	github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d
 | 
						github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d
 | 
				
			||||||
	github.com/cheggaaa/pb/v3 v3.0.8
 | 
						github.com/cheggaaa/pb/v3 v3.0.8
 | 
				
			||||||
	github.com/gologme/log v1.2.0
 | 
						github.com/gologme/log v1.2.0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								go.sum
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
										
									
									
									
								
							| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
github.com/Arceliar/ironwood v0.0.0-20230515022317-31b976732ebe h1:u69sr6Y9jqu6sk43Yyt+izLnLGgqCw3OYh2HU+jYUBw=
 | 
					github.com/Arceliar/ironwood v0.0.0-20230521173602-97ee6b09b8e0 h1:u0BeMjhq0+jU+zaL6zlaBo9Z5KuG26bMtm+XM2e6dSQ=
 | 
				
			||||||
github.com/Arceliar/ironwood v0.0.0-20230515022317-31b976732ebe/go.mod h1:MIfrhR4b+U6gurd5pln622Zwaf2kzpIvXcnvRZMvlRI=
 | 
					github.com/Arceliar/ironwood v0.0.0-20230521173602-97ee6b09b8e0/go.mod h1:5x7fWW0mshe9WQ1lvSMmmHBYC3BeHH9gpwW5tz7cbfw=
 | 
				
			||||||
github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d h1:UK9fsWbWqwIQkMCz1CP+v5pGbsGoWAw6g4AyvMpm1EM=
 | 
					github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d h1:UK9fsWbWqwIQkMCz1CP+v5pGbsGoWAw6g4AyvMpm1EM=
 | 
				
			||||||
github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d/go.mod h1:BCnxhRf47C/dy/e/D2pmB8NkB3dQVIrkD98b220rx5Q=
 | 
					github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d/go.mod h1:BCnxhRf47C/dy/e/D2pmB8NkB3dQVIrkD98b220rx5Q=
 | 
				
			||||||
github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
 | 
					github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -183,7 +183,8 @@ func (c *Core) MTU() uint64 {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Core) ReadFrom(p []byte) (n int, from net.Addr, err error) {
 | 
					func (c *Core) ReadFrom(p []byte) (n int, from net.Addr, err error) {
 | 
				
			||||||
	buf := make([]byte, c.PacketConn.MTU())
 | 
						buf := allocBytes(int(c.PacketConn.MTU()))
 | 
				
			||||||
 | 
						defer freeBytes(buf)
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		bs := buf
 | 
							bs := buf
 | 
				
			||||||
		n, from, err = c.PacketConn.ReadFrom(bs)
 | 
							n, from, err = c.PacketConn.ReadFrom(bs)
 | 
				
			||||||
| 
						 | 
					@ -217,7 +218,8 @@ func (c *Core) ReadFrom(p []byte) (n int, from net.Addr, err error) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Core) WriteTo(p []byte, addr net.Addr) (n int, err error) {
 | 
					func (c *Core) WriteTo(p []byte, addr net.Addr) (n int, err error) {
 | 
				
			||||||
	buf := make([]byte, 0, 65535)
 | 
						buf := allocBytes(0)
 | 
				
			||||||
 | 
						defer freeBytes(buf)
 | 
				
			||||||
	buf = append(buf, typeSessionTraffic)
 | 
						buf = append(buf, typeSessionTraffic)
 | 
				
			||||||
	buf = append(buf, p...)
 | 
						buf = append(buf, p...)
 | 
				
			||||||
	n, err = c.PacketConn.WriteTo(buf, addr)
 | 
						n, err = c.PacketConn.WriteTo(buf, addr)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										17
									
								
								src/core/pool.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/core/pool.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					package core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var bytePool = sync.Pool{New: func() interface{} { return []byte(nil) }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func allocBytes(size int) []byte {
 | 
				
			||||||
 | 
						bs := bytePool.Get().([]byte)
 | 
				
			||||||
 | 
						if cap(bs) < size {
 | 
				
			||||||
 | 
							bs = make([]byte, size)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return bs[:size]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func freeBytes(bs []byte) {
 | 
				
			||||||
 | 
						bytePool.Put(bs[:0])
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue