고루틴을 우아하게 종료
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 <p>빈 구조체 값을 보유할 수 있는 구조체{} 유형의 종료 채널을 소개합니다.</p> <ul> <li>startLoop에서 quit를 초기화합니다. 채널을 선택하고 루프 고루틴을 시작합니다.</li> <li>stopLoop에서는 종료 채널을 닫고 루프 고루틴에 중지하라는 신호를 보냅니다.</li> <li>루프 고루틴에서는 기본 케이스와 함께 select를 사용하여 계속해서 종료 채널의 신호를 확인하십시오. 신호가 수신되면 루프가 정상적으로 종료됩니다.</li> </ul> <p>이 메커니즘을 사용하면 종료 채널을 통해 고루틴에 신호를 보내 무한 루프를 정상적으로 종료할 수 있습니다.</p></code>
위 내용은 Go에서 고루틴을 정상적으로 종료하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!