> 백엔드 개발 > Golang > Go Scheduler는 언제 새로운 M과 P를 생성합니까?

Go Scheduler는 언제 새로운 M과 P를 생성합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-29 18:39:43
원래의
353명이 탐색했습니다.

When Does the Go Scheduler Create New M and P?

Go Scheduler가 새로운 M과 P를 생성하는 경우

Go 런타임에서는 고루틴, 운영 체제 스레드(OS 스레드) 및 컨텍스트/ 프로세서(M과 P)는 동시성을 관리하기 위해 협력합니다. 효율적인 성능을 위해서는 새로운 M 및 P 엔터티가 생성되는 시기를 이해하는 것이 중요합니다.

M 및 P 생성

  • M(기계): M은 OS 스레드를 나타내며 고루틴이 실행되도록 예약될 때 생성됩니다. M의 개수는 런타임.GOMAXPROCS 환경 변수에 의해 초기에 설정됩니다.
  • P(프로세서): A P는 고루틴을 실행하는 프로세서입니다. 각 P는 M과 연결됩니다. M이 블록되면 해당 P에서 고루틴을 실행하기 위해 새로운 M이 생성될 수 있습니다.

시나리오 분석

In 코드 예제에서는 차단 작업을 수행하는 여러 고루틴을 만듭니다. 이 시나리오에서는:

  1. 첫 번째 고루틴 배치가 기존 P 인스턴스에 예약됩니다.
  2. 모든 P의 로컬 큐가 가득 차면 오버플로를 처리하기 위해 새 M이 생성됩니다.
  3. 그러나 고루틴은 go func() 내에서 차단 작업을 수행하므로 차단된 고루틴과 관련된 M은 P에서 제거되고 유휴 스레드 풀에 배치됩니다.
  4. New 차단된 M을 대체하고 해당 P에서 고루틴을 계속 실행하기 위해 M이 생성됩니다.

결론

요약하면 Go 스케줄러는 다음과 같은 경우에 새 M을 생성합니다. 고루틴이 실행되도록 예약되어 있으며 무료 OS 스레드를 사용할 수 없습니다. 기존 P의 로컬 큐가 가득 차면 새 P가 생성됩니다. 그러나 차단 고루틴의 경우 각 차단 작업에는 별도의 M이 필요하므로 생성된 M 수가 가상 코어 수를 초과할 수 있습니다.

추가 리소스

  • [Go 블로그의 GOMAXPROCS](https://blog.golang.org/GOMAXPROCS)
  • [Go 고루틴, OS 스레드 및 CPU 관리](https://godoc.org/ 런타임/debug#SetMaxThreads)
  • [GMP 기본 사항](https://www.programmersought.com/article/79557885527/)

위 내용은 Go Scheduler는 언제 새로운 M과 P를 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿