질문:
제공된 예제 코드에서 고루틴은 HTTP 핸들러(HomeHandler)는 서버가 응답을 반환한 후에도 고루틴은 항상 실행을 완료합니다. 클라이언트?
예제 코드:
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) }
답변:
예, 작업자에서 시작된 고루틴은 모든 상황에서 실행됩니다.
고루틴은 Go 프로그램 내의 경량 스레드이며 주요 기능이나 HTTP 핸들러의 실행에 의해 제한되지 않습니다. 오류가 발생하거나 명시적으로 종료되지 않는 한 계속해서 동시에 실행됩니다. 이 경우 작업자 고루틴은 비동기적으로 시작되고 HomeHandler 함수는 클라이언트에 응답을 작성한 후 즉시 반환됩니다. 핸들러 함수가 반환되고 서버가 응답을 보낸 후에도 작업자 고루틴은 10초 동안 대기하고 완료 메시지를 인쇄하는 작업을 마칠 때까지 계속 실행됩니다.
고루틴이 완료되지 않을 수 있는 유일한 시나리오
위 내용은 HTTP 핸들러에서 시작된 고루틴은 응답이 전송된 후에 항상 완료됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!