고루틴을 우아하게 종료
Go에서 고루틴은 동시성을 제공하여 여러 작업을 동시에 실행할 수 있습니다. 때때로 애플리케이션을 정상적으로 종료해야 하는 경우와 같이 고루틴을 종료해야 하는 경우가 있습니다.
다음 코드를 고려하세요.
<code class="go">func startsMain() { go main() } func stopMain() { //kill main } func main() { //infinite loop }</code>
이 시나리오에서는 기본 고루틴이 실행됩니다. 무한 루프이며 stopMain 함수에서 이를 중지하려고 합니다. 이를 어떻게 달성할 수 있나요?
해결책은 채널을 사용하여 고루틴 간 통신에 있습니다. 다음은 향상된 코드 조각입니다.
<code class="go">var quit chan struct{} func startLoop() { quit = make(chan struct{}) go loop() } func stopLoop() { close(quit) } // BTW, you cannot call your function main, it is reserved func loop() { for { select { case <-quit: return // better than break default: // do stuff. I'd call a function, for clarity: do_stuff() } } }</code>
빈 구조체 값을 보유할 수 있는 구조체{} 유형의 종료 채널을 소개합니다.
이 메커니즘을 사용하면 종료 채널을 통해 고루틴에 신호를 보내 무한 루프를 정상적으로 종료할 수 있습니다.
위 내용은 Go에서 고루틴을 정상적으로 종료하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!