GOMAXPROCS를 2로 설정했지만 프로그램이 계속 손상됨
runtime.GOMAXPROCS(2) 설정에도 불구하고 프로그램에서 숫자를 출력하는 동안 일시 중지 문제가 발생함 . 높은 CPU 사용량이 관찰되지만 오작동의 원인은 여전히 파악하기 어렵습니다.
제공된 코드에는 바쁜 루프인 영원히()와 무한 루프로 숫자를 인쇄하는 show()라는 두 개의 고루틴이 있습니다. 주요 기능은 두 개의 CPU 코어를 활용하도록 GOMAXPROCS를 설정합니다. 그런데 프로그램이 응답하지 않게 됩니다.
문제는 Forever()의 지속적인 동작에 있습니다. 지속적으로 실행함으로써 전체 OS 스레드를 소비하고 런타임의 고루틴 예약을 방해합니다. 특히 Go 1.5에서는 가비지 수집의 세계 중지 단계를 방해합니다.
이 문제를 해결하려면 Forever()의 바쁜 루프를 정기적으로 CPU를 생성하는 함수로 대체할 수 있습니다. 또는 무한 루프가 필요하지 않으므로 완전히 제거할 수도 있습니다.
예를 들어, Forever()를 다음과 같이 수정하면 문제가 해결됩니다.
func forever() { for { runtime.Gosched() } }
루프가 발생하면 고루틴은 제어권을 포기하고 다른 고루틴이 실행되도록 허용할 수 있습니다. 이를 통해 핵심 기능을 담당하는 고루틴을 포함한 모든 고루틴이 효율적으로 실행될 수 있습니다.
위 내용은 `runtime.GOMAXPROCS(2)` 설정에도 불구하고 내 Go 프로그램이 정지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!