Maison >développement back-end >Golang >Pourquoi l'activation de CGO_ENABLED ralentit-elle la compilation, même sans liaisons C ?
Pourquoi CGO_ENABLED peut ralentir la compilation, même sans liaisons C
Lors de la création de programmes impliquant une utilisation du réseau, l'activation de CGO_ENABLED pour la compilation peut entraîner un ralentissement important. Cela se produit même si le programme n'interagit pas avec le code C. Considérons le simple serveur HTTP suivant :
package main import ( "flag" "fmt" "log" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi! glad you requested %s.\n", r.URL.Path[1:]) } func main() { port := flag.Int("port", 9000, "") flag.Parse() http.HandleFunc("/", handler) err := http.ListenAndServe(fmt.Sprintf(":%d", *port), nil) if err != nil { log.Fatal(err) } }
Une comparaison des temps de compilation révèle une différence marquée :
% time go build go build 0.46s user 0.06s system 131% cpu 0.396 total % time CGO_ENABLED=0 go build CGO_ENABLED=0 go build 3.93s user 0.15s system 143% cpu 2.849 total
La raison en est que les packages de la bibliothèque standard sont compilés sans indicateurs . Lorsque CGO_ENABLED est défini, cela modifie les indicateurs de compilation, ce qui signifie que ces packages prédéfinis ne peuvent plus être utilisés. Par conséquent, une grande partie de la bibliothèque standard doit être recompilée.
Lors de l'installation de packages via go build -i, je peux atténuer ce problème, mais cela présente ses propres inconvénients. L'installation de packages construits avec CGO_ENABLED=0 améliorera la vitesse des futures builds, mais cela ralentira également les builds qui ne l'utilisent pas.
Pour résoudre ce conflit, envisagez d'utiliser les indicateurs -installsuffix et/ou -pkgdir, qui créent des répertoires séparés pour différents modes de compilation, optimisant l'efficacité de la construction et éliminant le retard associé à la compilation avec CGO_ENABLED.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!