type Pool … type poolLocalInternal … type poolLocal … // from runtime // //go:linkname runtime_randn runtime.randn func runtime_randn(n uint32) uint32 var poolRaceHash … // poolRaceAddr returns an address to use as the synchronization point // for race detector logic. We don't use the actual pointer stored in x // directly, for fear of conflicting with other synchronization on that address. // Instead, we hash the pointer to get an index into poolRaceHash. // See discussion on golang.org/cl/31589. func poolRaceAddr(x any) unsafe.Pointer { … } // Put adds x to the pool. func (p *Pool) Put(x any) { … } // Get selects an arbitrary item from the [Pool], removes it from the // Pool, and returns it to the caller. // Get may choose to ignore the pool and treat it as empty. // Callers should not assume any relation between values passed to [Pool.Put] and // the values returned by Get. // // If Get would otherwise return nil and p.New is non-nil, Get returns // the result of calling p.New. func (p *Pool) Get() any { … } func (p *Pool) getSlow(pid int) any { … } // pin pins the current goroutine to P, disables preemption and // returns poolLocal pool for the P and the P's id. // Caller must call runtime_procUnpin() when done with the pool. func (p *Pool) pin() (*poolLocal, int) { … } func (p *Pool) pinSlow() (*poolLocal, int) { … } // poolCleanup should be an internal detail, // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/bytedance/gopkg // - github.com/songzhibin97/gkit // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname poolCleanup func poolCleanup() { … } var allPoolsMu … var allPools … var oldPools … func init() { … } func indexLocal(l unsafe.Pointer, i int) *poolLocal { … } // Implemented in runtime. func runtime_registerPoolCleanup(cleanup func()) func runtime_procPin() int func runtime_procUnpin() //go:linkname runtime_LoadAcquintptr internal/runtime/atomic.LoadAcquintptr func runtime_LoadAcquintptr(ptr *uintptr) uintptr //go:linkname runtime_StoreReluintptr internal/runtime/atomic.StoreReluintptr func runtime_StoreReluintptr(ptr *uintptr, val uintptr) uintptr