package server import ( "sync" ) // 对象池(减少GC压力) var ( // messagePool 消息缓冲区池 messagePool = sync.Pool{ New: func() interface{} { return make([]byte, 0, 4096) }, } // messagesPool 消息列表池 messagesPool = sync.Pool{ New: func() interface{} { return make([][]byte, 0, 4) }, } ) // getMessageBuffer 从池中获取消息缓冲区 func getMessageBuffer() []byte { return messagePool.Get().([]byte) } // putMessageBuffer 将消息缓冲区放回池中 func putMessageBuffer(buf []byte) { if buf == nil { return } // 重置长度但保留容量 buf = buf[:0] // 如果容量太大,不回收(避免池中积累大对象) if cap(buf) > 64*1024 { return } messagePool.Put(buf) } // getMessagesSlice 从池中获取消息列表 func getMessagesSlice() [][]byte { return messagesPool.Get().([][]byte) } // putMessagesSlice 将消息列表放回池中 func putMessagesSlice(messages [][]byte) { if messages == nil { return } // 清空但保留容量 for i := range messages { messages[i] = nil } messages = messages[:0] // 如果容量太大,不回收 if cap(messages) > 64 { return } messagesPool.Put(messages) } // requestPool Request对象池 var requestPool = sync.Pool{ New: func() interface{} { // 注意:这里不能直接创建requestImpl,因为它是未导出的 // 对象池暂时不用于Request和Response,因为它们需要特定的初始化参数 // 如果需要使用对象池,需要修改request和response的创建方式 return nil }, } // responsePool Response对象池 var responsePool = sync.Pool{ New: func() interface{} { // 注意:这里不能直接创建responseImpl,因为它是未导出的 // 对象池暂时不用于Request和Response,因为它们需要特定的初始化参数 return nil }, }