Go 플레이그라운드에서 코드를 실행할 때 개발자는 로컬 머신에서 동일한 코드를 실행할 때와 비교하여 불일치에 직면할 수 있습니다. 이 문서에서는 특히 고루틴 및 동기화 메커니즘을 처리할 때 동작의 차이점을 살펴봅니다.
다음 Go 코드를 고려하세요.
package main
import (
"fmt"
)
func other(done chan bool) {
done Go 플레이그라운드에서 이 코드는 "프로세스가 너무 오래 걸렸습니다."라는 오류를 생성합니다. 이는 다른 함수 내에서 생성된 고루틴이 무기한 실행된다는 것을 의미합니다.
그러나 여러 CPU 코어(GOMAXPROCS > 1)가 있는 로컬 시스템에서 동일한 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Hello, playground
Finished.
이는 기본 고루틴이 완료되면 다른 고루틴이 종료됨을 의미합니다.
행동 간격 설명
Go 놀이터와 로컬 머신 간의 다른 동작 사용 가능한 프로세서 수에 따라 달라질 수 있습니다. Go 플레이그라운드에서 GOMAXPROCS의 기본값은 1입니다. 이는 한 번에 하나의 고루틴만 실행할 수 있음을 의미합니다. 따라서 위의 예에서 다른 내부에 생성된 무한 고루틴은 기본 고루틴이 계속되는 것을 방지합니다.
반대로, 여러 CPU 코어로 로컬에서 실행할 때 GOMAXPROCS는 기본적으로 사용 가능한 코어 수를 지정하므로 여러 고루틴이 동시에 실행합니다. 따라서 다른 내부에 생성된 무한 고루틴은 기본 고루틴의 종료를 차단하지 않습니다.
결론
Go에서 고루틴의 동작은 사용 가능한 프로세서(GOMAXPROCS) 수에 따라 다릅니다. Go 플레이그라운드에서는 고루틴이 무한정 실행되는 것으로 인식될 수 있는 기본값 1을 사용하지만, 여러 코어가 있는 로컬 시스템에서 동일한 코드를 실행하면 기본 고루틴이 완료될 때 고루틴이 종료될 수 있는 다른 동작을 제공합니다. 이러한 이해는 개발자가 오해를 피하고 코드가 다양한 환경에서 예상대로 작동하도록 하는 데 도움이 됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3