Go 루틴을 사용할 때 효율적으로 종료하는 방법을 아는 것이 필수적입니다. 다음 설정을 고려해보세요.
<code class="go">func startsMain() { go main() } func stopMain() { // TODO: Kill main } func main() { // Infinite loop }</code>
이 설정은 main이라는 고루틴에 무한 루프를 생성합니다. 루프를 종료하려면 stopMain에서 고루틴을 제어할 수 있는 방법이 필요합니다.
고루틴을 종료하는 효과적인 접근 방식 중 하나는 채널과 select 문을 사용하는 것입니다.
<code class="go">var quit chan struct{} func startLoop() { quit := make(chan struct{}) go loop(quit) } func stopLoop() { close(quit) } func loop(quit chan struct{}) { for { select { case <-quit: return default: // Do stuff } } }</code>
이 예에서는 quit라는 이름의 0 크기 채널(chan struct{})을 사용하여 고루틴에 중지 신호를 보냅니다. 루프 기능은 select 문을 사용하여 종료 채널을 반복적으로 확인합니다. quit가 값(중지 요청을 나타냄)을 받으면 루프가 종료됩니다.
Go는 고루틴 처리를 위한 추가 동시성 패턴을 제공합니다. 이러한 패턴에 대한 자세한 내용은 Go 블로그를 방문하세요.
CPU 소모를 피하면서 정기적으로 기능을 실행하려면 티커를 사용할 수 있습니다.
<code class="go">import "time" // [...] func loop() { ticker := time.NewTicker(2 * time.Second) defer ticker.Stop() for { select { case <-quit: return case <-ticker.C: // Do stuff } } }</code>
이 경우 quit가 값을 받거나 티커가 실행될 때까지 차단을 선택하여 함수가 지정된 간격으로 실행되도록 합니다.
위 내용은 Go에서 고루틴을 어떻게 효과적으로 종료하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!