>백엔드 개발 >Golang >Go 스케줄러는 차단 작업이 있을 때 M 및 P 생성을 어떻게 관리합니까?

Go 스케줄러는 차단 작업이 있을 때 M 및 P 생성을 어떻게 관리합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-31 05:20:02577검색

How does the Go scheduler manage the creation of M and P in the presence of blocking operations?

Go Scheduler의 M 및 P 생성 이해

Go 스케줄러는 고루틴, OS 스레드(M) 및 컨텍스트가 포함된 모델에서 작동합니다. /프로세서(P). 성능 최적화를 위해 스케줄러는 M과 P의 생성과 사용을 동적으로 관리합니다.

M의 생성

M은 스케줄러가 차단 실행 필요성을 감지하면 생성됩니다. 작업. 예제 코드에서 고루틴은 추가 M 생성을 트리거하는 차단 데이터베이스 작업을 수행합니다. 생성된 M의 정확한 수는 차단된 고루틴 수와 사용 가능한 시스템 리소스에 따라 다릅니다.

생성 of P

P는 새로운 고루틴이 시작될 때 생성됩니다. 그러나 스케줄러는 각 고루틴에 대해 새로운 P를 생성하지 않습니다. 대신 기존 P 인스턴스를 재사용하여 일반적으로 사용 가능한 CPU 수로 설정되는 GOMAXPROCS 값과 동일한 P 수를 고정적으로 유지합니다.

예제 코드에서

테스트 코드에서는 두 개의 배치로 50개의 고루틴을 생성합니다. 데이터베이스 작업이 차단되므로 차단 고루틴을 처리하기 위해 필요에 따라 M이 생성됩니다. 그러나 P 인스턴스가 재사용되므로 시스템의 가상 코어 수를 나타내는 8개의 P만 생성됩니다.

추가 리소스

이에 대한 자세한 내용은 주제에 대해서는 다음 리소스를 참조하세요.

  • [Go Goroutine, OS Thread 및 CPU 관리](https://www.programming-books.net/2019/07/understand-go-scheduler- goroutine.html)
  • [Go GMP(Goroutine-MP) 모델 이해](https://blog.container-solutions.com/understanding-go-gmp-goroutine-m-p-model)

위 내용은 Go 스케줄러는 차단 작업이 있을 때 M 및 P 생성을 어떻게 관리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.