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
Lepaskan: 2024-11-25 17:27:13
asal
1009 orang telah melayarinya

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

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!

sumber:php.cn
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