Rumah > pembangunan bahagian belakang > Golang > Mengapakah Mendayakan CGO_ENABLED Memperlahankan Kompilasi, Walaupun Tanpa Pengikatan C?

Mengapakah Mendayakan CGO_ENABLED Memperlahankan Kompilasi, Walaupun Tanpa Pengikatan C?

Patricia Arquette
Lepaskan: 2024-11-26 03:29:08
asal
231 orang telah melayarinya

Why Does Enabling CGO_ENABLED Slow Down Compilation, Even Without C Bindings?

Mengapa CGO_ENABLED Boleh Melambatkan Kompilasi, Walaupun Tanpa C Bindings

Apabila mencipta program yang melibatkan penggunaan rangkaian, mendayakan CGO_ENABLED untuk kompilasi boleh mengakibatkan kelembapan yang ketara. Ini berlaku walaupun program tidak berinteraksi dengan kod C. Pertimbangkan pelayan HTTP mudah berikut:

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)
    }
}
Salin selepas log masuk

Perbandingan masa kompilasi mendedahkan perbezaan yang ketara:

% 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
Salin selepas log masuk

Alasannya ialah pakej dalam perpustakaan standard disusun tanpa bendera . Apabila CGO_ENABLED ditetapkan, ia menukar bendera kompilasi, yang bermaksud bahawa pakej pra-bina ini tidak boleh digunakan lagi. Oleh itu, sebahagian besar perpustakaan standard mesti dikompilasi semula.

Semasa memasang pakej melalui go build -saya boleh mengurangkan isu ini, ia datang dengan kelemahannya sendiri. Memasang pakej yang dibina dengan CGO_ENABLED=0 akan meningkatkan kelajuan binaan masa hadapan, tetapi ia juga akan memperlahankan binaan yang tidak menggunakannya.

Untuk menyelesaikan konflik ini, pertimbangkan untuk menggunakan bendera -installsuffix dan/atau -pkgdir, yang mencipta direktori berasingan untuk mod kompilasi berbeza, mengoptimumkan kecekapan binaan dan menghapuskan kelewatan yang dikaitkan dengan menyusun dengan CGO_ENABLED.

Atas ialah kandungan terperinci Mengapakah Mendayakan CGO_ENABLED Memperlahankan Kompilasi, Walaupun Tanpa Pengikatan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan