내 고루틴이 실행되기 전에 종료되는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-30 10:59:02
원래의
942명이 탐색했습니다.

Why Is My Goroutine Terminating Before Execution?

내 고루틴이 실행되지 않는 이유는 무엇인가요?

Go 프로그래밍 영역에서 고루틴은 동시 실행을 위한 강력한 메커니즘을 제공합니다. 그러나 때로는 이러한 고루틴이 응답하지 않는 것처럼 보여 개발자가 혼란에 빠질 수 있습니다.

시나리오:

고루틴을 생성하고 전송을 시도하는 다음 Go 코드를 고려하세요. 채널을 통한 메시지:

<code class="go">package main
import "fmt"
func main(){

messages := make(chan string,3)

messages <- "one"
messages <- "two"
messages <- "three"

go func(m *chan string) {
    fmt.Println("Entering the goroutine...")
    for {
        fmt.Println(<- *m)
    }
}(&messages)

fmt.Println("Done!")
}</code>
로그인 후 복사

이 코드를 실행하면 놀라운 결과가 나올 수 있습니다.

Done!
로그인 후 복사

문제:

에도 불구하고 고루틴을 생성하면 코드는 그 안에 있는 명령문을 실행하지 않습니다. 그 이유는 메인 프로그램이 종료되었기 때문입니다. Go에서 고루틴은 메인 기능과 독립적으로 실행됩니다. 메인 프로그램이 종료되자마자 실행 기회가 없더라도 실행 중인 모든 고루틴이 종료됩니다.

해결책:

고루틴이 조기에 종료되지 않도록 하려면 고루틴이 작업을 마칠 때까지 메인 프로그램을 활성 상태로 유지해야 합니다. 이를 달성하기 위한 몇 가지 접근 방식이 있습니다.

  • 채널: 고루틴의 메시지를 기다리는 두 번째 채널을 만들어 메시지가 수신될 때까지 기본 프로그램을 효과적으로 차단합니다.
  • 동기화: sync.WaitGroup 또는 유사한 동기화 메커니즘을 사용하여 goroutine이 작업을 완료했을 때 신호를 보냅니다.
  • 타이머: 타이머를 생성하여 지정된 기간 동안 기다려서 goroutine을 실행할 충분한 시간을 확보하세요.

권장 사항:

goroutine 동작 및 동시성에 대한 보다 포괄적인 이해를 원하시면 Go, Golang 블로그의 훌륭한 블로그 게시물인 "Go의 동시성"을 읽어보는 것이 좋습니다.

위 내용은 내 고루틴이 실행되기 전에 종료되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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