> 백엔드 개발 > Golang > HTTP 핸들러에서 시작된 고루틴은 응답이 전송된 후에 항상 완료됩니까?

HTTP 핸들러에서 시작된 고루틴은 응답이 전송된 후에 항상 완료됩니까?

Barbara Streisand
풀어 주다: 2024-11-25 17:27:13
원래의
1006명이 탐색했습니다.

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

HTTP 핸들러 내 고루틴 실행

질문:

제공된 예제 코드에서 고루틴은 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초 동안 대기하고 완료 메시지를 인쇄하는 작업을 마칠 때까지 계속 실행됩니다.

고루틴이 완료되지 않을 수 있는 유일한 시나리오

  • main 함수가 종료되어 전체 프로그램이 종료되는 경우.
  • 프로그램에 치명적인 오류가 발생하는 경우 메모리가 부족해서요.

위 내용은 HTTP 핸들러에서 시작된 고루틴은 응답이 전송된 후에 항상 완료됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿