Pour importer bpool à partir du code source utilisez la commande go get.
Allez Get -u github.com/unit-io/bpool
Utilisez le pool de tampons pour rédiger des demandes entrantes à tampon telles que les opérations de put ou de lots ou d'utiliser le pool de tampons lors de l'écriture de données dans le fichier journal (pendant l'opération de validation). L'objectif de la création de la bibliothèque BufferPool avec la capacité est d'effectuer des écritures initiales à tampon sans backoff jusqu'à ce que le pool de tampons atteigne sa taille cible. Le pool de tampons ne rejette aucune demande de GET ou d'écriture, mais il y ajoute un délai progressif pour limiter l'utilisation de la mémoire qui peut être utilisée pour d'autres opérations telles que l'écriture pour enregistrer les opérations de synchronisation ou DB.
La documentation détaillée de l'API est disponible à l'aide du service godoc.org.
Utilisez le client en l'important dans votre code source client GO. Par exemple,
Importer "github.com/unit-io/bpool"
Un extrait de code suivant s'il est exécuté sans capacité de tampon consommera toute la mémoire du système et provoquera une panique.
buf := bytes.NewBuffer(make([]byte, 0, 2))
defer func() {
if r := recover(); r != nil {
fmt.Println("panics from blast")
}
}()
for {
_, err := buf.Write([]byte("create blast"))
if err != nil {
fmt.Println(err.Error())
return
}
}
Le code de code pour utiliser BufferPool avec la capacité limitera l'utilisation de la mémoire du système en ajoutant un délai progressif aux demandes et ne provoquera pas de panique.
pool := bpool.NewBufferPool(1<<20, &bpool.Options{MaxElapsedTime: 1 * time.Minute, WriteBackOff: true}) // creates BufferPool of 16MB target size
buf := pool.Get()
defer pool.Put(buf)
for {
_, err := buf.Write([]byte("create blast"))
if err != nil {
fmt.Println(err.Error())
return
}
}
Utilisez la méthode bpool.newbufferpool () et passez le paramètre BufferSize pour créer un nouveau pool de tampons.
const (
BufferSize = 1<<30 // (1GB size)
)
pool := bpool.NewBufferPool(BufferSize, nil)
Pour obtenir du tampon à partir du pool de tampons, utilisez BufferPool.get (). Lorsque le pool de tampons atteint sa capacité, la méthode Get fonctionne avec un retard progressif pour limiter l'utilisation de la mémoire du système.
....
var buffer *bpool.Buffer
buffer = pool.Get()
Pour écrire dans Buffer Utilisez Buffer.Write () Méthode.
var scratch [8]byte
binary.LittleEndian.PutUint64(scratch[0:8], uint64(buffer.Size()))
b.buffer.Write(scratch[:])
....
Pour lire la méthode Utilisez Buffer.Bytes (). Cette opération renvoie la tranche de données soulignement stockée dans le tampon.
data := buffer.Bytes()
...
Pour mettre du tampon dans la pool lors de la fin de la méthode d'utilisation de tampon Utiliser BufferPool.put (), cette opération réinitialise la tranche de soulignement. Il réinitialise également l'intervalle de pool de tampon qui a été utilisé pour retarder l'opération GET si la capacité est inférieure à la taille de la cible.
pool.Put(buffer)
...
Pour réinitialiser la tranche de soulignement stockée dans le tampon et continuer à utiliser la méthode Buffer Use Buffer.ResET () au lieu d'utiliser BufferPool.put ().
buffer.Reset()
....
Si vous souhaitez contribuer, veuillez débarquer le référentiel et utiliser une branche de fonctionnalité. Les demandes de traction sont les bienvenues.
Ce projet est autorisé sous licence MIT.