"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter des générateurs de style Python dans Go tout en évitant les fuites de mémoire ?

Comment implémenter des générateurs de style Python dans Go tout en évitant les fuites de mémoire ?

Publié le 2024-11-12
Parcourir:799

How to Implement Python-Style Generators in Go While Avoiding Memory Leaks?

Générateurs de style Python dans Go

Comprendre les tampons de canal

Dans votre code, vous avez observé que l'augmentation du tampon de canal taille de 1 à 10 performances améliorées en réduisant les changements de contexte. Cette conception est correcte. Un tampon plus grand permet à la goroutine de Fibonacci de remplir plusieurs emplacements à l'avance, réduisant ainsi le besoin d'une communication constante entre les goroutines.

Durée de vie du canal et gestion de la mémoire

Cependant, la durée de vie d'un canal la vie est distincte des goroutines qui l'utilisent. Dans votre code d'origine, la goroutine de Fibonacci n'est pas terminée et la référence du canal est conservée dans la fonction principale. En tant que tel, le canal et son contenu persistent en mémoire, entraînant une fuite de mémoire potentielle.

Une implémentation alternative du générateur

Pour éviter les fuites de mémoire tout en utilisant Python- générateurs de style, vous pouvez implémenter une solution similaire à la suivante :

package main

import "fmt"

func fib(n int) chan int {
    c := make(chan int)
    go func() {
        x, y := 0, 1
        for i := 0; i 

Explication :

  • La fonction fib renvoie un canal qui génère la séquence de Fibonacci jusqu'à la valeur n spécifiée.
  • La goroutine démarré dans la fonction fib génère et envoie constamment des nombres de Fibonacci au canal jusqu'à ce que la séquence soit épuisée.
  • L'instruction close(c) ferme le canal lorsque la séquence est terminée, signalant à la fonction principale qu'il n'y a pas plus d'éléments à lire.
  • Dans la fonction principale, l'utilisation d'une boucle for basée sur une plage sur le canal consomme automatiquement ses éléments jusqu'à ce qu'il soit fermé.

Cette approche garantit que le fibonacci goroutine se termine correctement, empêchant les fuites de mémoire et fournissant une implémentation propre et efficace du générateur.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3