Rumah >pembangunan bahagian belakang >Golang >Adakah Goroutine Dilancarkan dalam Pengendali HTTP Sentiasa Selesai Selepas Respons Dihantar?

Adakah Goroutine Dilancarkan dalam Pengendali HTTP Sentiasa Selesai Selepas Respons Dihantar?

Barbara Streisand
Barbara Streisandasal
2024-11-25 17:27:131009semak imbas

Will a Goroutine Launched in an HTTP Handler Always Finish After the Response is Sent?

Pelaksanaan Goroutine dalam Pengendali HTTP

Soalan:

Dalam kod contoh yang disediakan, di mana goroutine dimulakan dalam Pengendali HTTP (HomeHandler), adakah goroutine sentiasa menyelesaikan pelaksanaan, walaupun selepas pelayan kembali respons kepada pelanggan?

Contoh Kod:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func worker() {
    fmt.Println("worker started")
    time.Sleep(time.Second * 10)
    fmt.Println("worker completed")
}

func HomeHandler(w http.ResponseWriter, r *http.Request) {
    go worker()
    w.Write([]byte("Hello, World!"))
}

func main() {
    http.HandleFunc("/home", HomeHandler)
    http.ListenAndServe(":8081", nil)
}

Jawapan:

Ya, goroutine bermula dalam pekerja akan menyelesaikan pelaksanaannya dalam semua situasi.

Gorutin ialah benang ringan dalam Pergi program dan tidak dikekang oleh pelaksanaan fungsi utama atau pengendali HTTP. Mereka terus berjalan serentak melainkan mereka menghadapi ralat atau ditamatkan secara eksplisit. Dalam kes ini, goroutine pekerja dimulakan secara tidak segerak, dan fungsi HomeHandler kembali serta-merta selepas menulis respons kepada pelanggan. Walaupun selepas fungsi pengendali kembali dan pelayan menghantar respons, goroutine pekerja terus melaksanakan sehingga ia menyelesaikan tugasnya untuk tidur selama 10 saat dan mencetak mesej penyiapannya.

Satu-satunya senario di mana goroutine mungkin tidak selesai ialah:

  • Jika fungsi utama keluar dan menamatkan keseluruhan atur cara.
  • Jika atur cara mengalami ralat maut, seperti kehabisan memori.

Atas ialah kandungan terperinci Adakah Goroutine Dilancarkan dalam Pengendali HTTP Sentiasa Selesai Selepas Respons Dihantar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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