खोज…


परिचय

Sync.Pool भविष्य में उपयोग के लिए आवंटित लेकिन अप्रयुक्त वस्तुओं का एक कैश संग्रहीत करता है, जो अक्सर बदलते संग्रह के लिए मेमोरी मंथन से बचता है, और स्मृति के कुशल, थ्रेड-सुरक्षित पुन: उपयोग की अनुमति देता है। पैकेज के समवर्ती ग्राहकों के बीच साझा अस्थायी वस्तुओं के समूह का प्रबंधन करना उपयोगी है, उदाहरण के लिए डेटाबेस कनेक्शन की सूची या आउटपुट बफ़र्स की सूची।

sync.Pool

sync.Pool संरचना का उपयोग करके हम ऑब्जेक्ट्स को पूल कर सकते हैं और उनका पुन: उपयोग कर सकते हैं।

package main

import (
    "bytes"
    "fmt"
    "sync"
)

var pool = sync.Pool{
    // New creates an object when the pool has nothing available to return.
    // New must return an interface{} to make it flexible. You have to cast
    // your type after getting it.
    New: func() interface{} {
        // Pools often contain things like *bytes.Buffer, which are
        // temporary and re-usable.
        return &bytes.Buffer{}
    },
}

func main() {
    // When getting from a Pool, you need to cast
    s := pool.Get().(*bytes.Buffer)
    // We write to the object
    s.Write([]byte("dirty"))
    // Then put it back
    pool.Put(s)

    // Pools can return dirty results

    // Get 'another' buffer
    s = pool.Get().(*bytes.Buffer)
    // Write to it
    s.Write([]bytes("append"))
    // At this point, if GC ran, this buffer *might* exist already, in
    // which case it will contain the bytes of the string "dirtyappend"
    fmt.Println(s)
    // So use pools wisely, and clean up after yourself
    s.Reset()
    pool.Put(s)

    // When you clean up, your buffer should be empty
    s = pool.Get().(*bytes.Buffer)
    // Defer your Puts to make sure you don't leak!
    defer pool.Put(s)
    s.Write([]byte("reset!"))
    // This prints "reset!", and not "dirtyappendreset!"
    fmt.Println(s)
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow