// Package variable 提供 sync.Pool 用于复用 Context,减少 GC 压力。 // // 包含池统计信息、Get/Put 包装方法和统计重置功能。 // // 作者:xfy package variable import ( "sync" "github.com/valyala/fasthttp" ) // PoolStats 池统计信息。 // // 记录 sync.Pool 的使用统计,用于监控和调试。 type PoolStats struct { // Gets 从池中获取对象的次数 Gets int64 // Puts 放回池中对象的次数 Puts int64 // NewCount 调用 New 函数创建对象的次数 NewCount int64 // Active 当前活跃对象数量(Gets - Puts) Active int64 } var ( // stats 全局池统计信息 stats PoolStats // statsMu 保护统计信息的读写锁 statsMu sync.RWMutex ) // GetStats 获取池统计信息的副本。 // // 返回当前统计信息的快照,线程安全。 func GetStats() PoolStats { statsMu.RLock() s := stats statsMu.RUnlock() return s } // GetPool 获取底层的 sync.Pool(用于测试和调试)。 func GetPool() *sync.Pool { return &pool } // PoolGet 从池中获取 Context(包装方法,用于统计) // // Deprecated: 使用 NewContext 代替,该函数保持向后兼容。 func PoolGet(ctx *fasthttp.RequestCtx) *Context { vc := NewContext(ctx) // 更新统计 statsMu.Lock() stats.Gets++ stats.Active = stats.Gets - stats.Puts statsMu.Unlock() return vc } // PoolPut 将 Context 放回池中(包装方法,用于统计) // // Deprecated: 使用 ReleaseContext 代替,该函数保持向后兼容。 func PoolPut(vc *Context) { if vc == nil { return } ReleaseContext(vc) // 更新统计 statsMu.Lock() stats.Puts++ stats.Active = stats.Gets - stats.Puts statsMu.Unlock() } // ResetStats 重置统计信息。 // // 将所有统计计数器清零,线程安全。 func ResetStats() { statsMu.Lock() stats = PoolStats{} statsMu.Unlock() }