>백엔드 개발 >Golang >고루틴 누출을 방지하고 시간 초과 내에 HTTP 요청을 취소하는 방법은 무엇입니까?

고루틴 누출을 방지하고 시간 초과 내에 HTTP 요청을 취소하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 09:43:02729검색

How to Prevent Goroutine Leaks and Cancel HTTP Requests within a Timeout?

동시성 제어를 통한 고루틴 시간 제한

제공된 코드에서는 고루틴(go func() 문)을 활용하는 Find() 함수를 구현했습니다. findCicCode()를 사용한 비동기 데이터 검색. 고루틴에서 응답을 받기 위해 50밀리초의 시간 초과를 설정했습니다.

그러나 시간 초과 시 잠재적인 고루틴 누출이 우려됩니다. 또한 시간 초과가 발생하면 findCicCode()에 의해 수행된 HTTP 요청을 취소할 수 있기를 원합니다.

고루틴 누출 방지

고루틴 누출을 처리하려면 특정 범위에서 생성된 모든 고루틴이 범위가 끝나기 전에 종료되도록 하는 것이 중요합니다. 이 경우 시간 초과에 도달하면 select 문 내에서 goroutine을 취소하는 것이 중요합니다.

<code class="go">case <-time.After(50 * time.Millisecond):
  // Cancel the goroutine to prevent a potential leak
  close(ch)
  return "Request timed out", false</code>

HTTP 요청 취소

HTTP 요청을 취소하려면 고루틴에서는 Go 표준 라이브러리에서 제공하는 context.Context 및 context.CancelFunc를 활용할 수 있습니다.

<code class="go">// Create a context with a timeout of 50 milliseconds
ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
defer cancel()

// Execute the findCicCode() function within this context
data, status := findCicCodeWithContext(ctx)

// If the context is canceled (timeout), the HTTP requests will be aborted</code>

위 내용은 고루틴 누출을 방지하고 시간 초과 내에 HTTP 요청을 취소하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.