Maison > développement back-end > Golang > le corps du texte

Pourquoi la compilation Go est-elle plus lente avec `CGO_ENABLED=0` même sans liaisons C ?

Linda Hamilton
Libérer: 2024-11-07 00:25:02
original
796 Les gens l'ont consulté

Why is Go compilation slower with `CGO_ENABLED=0` even without C bindings?

Ralentissement du temps de compilation avec CGO_ENABLED=0

Lors du développement de programmes Go basés sur le réseau, la compilation avec CGO_ENABLED=0 peut entraîner un ralentissement important par rapport à CGO_ENABLED=1. Ceci s'observe même lorsqu'aucune liaison C n'est utilisée, comme dans le cas d'un serveur HTTP de base :

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)
    }
}
Copier après la connexion

Les temps de compilation sont nettement plus lents lorsque CGO_ENABLED=0 :

% 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
Copier après la connexion

Causes du ralentissement

La différence de temps de compilation provient de la dépendance aux packages de bibliothèques standards. Lorsque CGO_ENABLED=1, ces packages sont construits avec les indicateurs nécessaires, mais lorsque CGO_ENABLED=0, ils ne le sont pas.

Les packages de bibliothèque standard sans indicateurs ne peuvent pas être utilisés avec CGO_ENABLED=0, ce qui oblige la plupart de la bibliothèque à être reconstruit. Cela augmente considérablement le temps de compilation.

Atténuer le ralentissement

Une solution consiste à installer des packages prédéfinis avec les indicateurs souhaités à l'aide de go build -i. Cependant, cette approche présente ses propres défis. L'installation de packages construits sans CGO_ENABLED=0 accélère les futures builds sans CGO_ENABLED=0 mais ralentit les builds avec CGO_ENABLED=0.

Pour résoudre ce problème, il est conseillé d'utiliser les indicateurs -installsuffix et/ou -pkgdir, qui permettent différents répertoires d'installation de packages en fonction des indicateurs de compilation utilisés. Cela permet des builds efficaces avec différents indicateurs.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!