> 백엔드 개발 > Golang > 고루틴이 차단 작업을 수행할 때 Go Scheduler는 어떻게 새로운 M과 P를 생성합니까?

고루틴이 차단 작업을 수행할 때 Go Scheduler는 어떻게 새로운 M과 P를 생성합니까?

Patricia Arquette
풀어 주다: 2024-10-30 02:18:28
원래의
528명이 탐색했습니다.

How Does the Go Scheduler Create New M and P When Goroutines Perform Blocking Operations?

Go Scheduler가 GMP 모델에서 새로운 M과 P를 생성할 때

In Go의 GMP(Goroutine, Machine, Processor) 모델인 스케줄러 특정 조건에 따라 M(머신)과 P(프로세서) 생성을 관리합니다.

M Creation

M은 다음과 같은 특정 이벤트에 응답하여 생성됩니다.

  • 차단 작업: 고루틴이 차단 작업(예: I/O, syscall)을 수행하면 해당 고루틴과 관련된 M이 차단됩니다. 고루틴을 계속 실행하기 위해 스케줄러는 새로운 M을 생성합니다.
  • 스케줄링 파이프라인: 실행을 기다리는 고루틴을 저장하는 글로벌 G 큐에 사용 가능한 M의 수보다 많은 고루틴이 있는 경우 , 스케줄러는 고루틴을 실행하기 위해 새로운 M을 생성합니다.

P 생성

P는 프로그램 시작 시 GOMAXPROCS 환경 변수를 기반으로 생성됩니다. 사용 가능한 최대 P 수입니다. 기본값은 시스템의 논리적 CPU 수입니다.

예제 분석

예제 코드에는 두 개의 고루틴 배치가 있습니다. 데이터베이스 작업을 실행 중입니다. 각 고루틴은 차단 I/O 작업을 수행합니다.

  • 첫 번째 배치: 스케줄러는 첫 번째 배치를 실행하기 위해 8M(가상 코어가 8개이므로)과 1P를 생성합니다. 고루틴. 각 M은 P의 로컬 대기열에서 고루틴을 실행합니다.
  • 두 번째 배치: 차단 작업으로 인해 초기 M이 차단되므로 스케줄러는 나머지 고루틴에 대해 새 M을 생성합니다. 두 번째 배치에서. P의 수가 1로 유지되더라도 M은 새 P와 연결됩니다.

따라서 귀하의 경우 스케줄러는 두 번째 고루틴 배치에 대해 8M 이상을 생성합니다. 작업이 차단되고 있습니다. P는 GOMAXPROCS 값을 기준으로 1로 제한되지만 M은 필요에 따라 동적으로 생성됩니다.

추가 리소스

자세한 이해는 다음을 참조하세요. 리소스:

  • https://www.programmersought.com/article/79557885527/
  • https://blog.golang.org/go-goroutine-os-thread-and -cpu 관리

위 내용은 고루틴이 차단 작업을 수행할 때 Go Scheduler는 어떻게 새로운 M과 P를 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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