>백엔드 개발 >Golang >Go Scheduler는 작업 차단을 위해 언제 새로운 M과 P를 생성합니까?

Go Scheduler는 작업 차단을 위해 언제 새로운 M과 P를 생성합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-01 04:52:27940검색

When Does the Go Scheduler Create New M and P for Blocking Tasks?

Go Scheduler가 새로운 M과 P를 생성할 때

Go 프로그래밍 언어에서 고루틴은 운영 체제( OS) 스레드, 고루틴 프로세서(P) 및 머신 리소스(M). 이러한 구성 요소가 어떻게 상호 작용하는지 이해하는 것이 중요하지만 새로운 M과 P가 언제 생성되는지 판단하는 것은 어려울 수 있습니다.

M과 P의 생성 이해

M Machine의 약어이며 고루틴을 실행하는 경량 OS 스레드를 나타냅니다. 반면 P는 프로세서를 나타내며 특정 M에서 고루틴의 실행을 관리합니다. Go 스케줄러는 고루틴을 처리하기 위해 필요에 따라 새로운 M을 생성합니다.

차단 작업의 경우

귀하의 예에서는 데이터베이스 작업을 수행하기 위해 여러 고루틴을 생성하는 테스트 함수를 정의했습니다. 각 고루틴은 특정 기간 동안 차단하도록 설계되어 고루틴이 적극적으로 실행되지 않는 시나리오를 시뮬레이션합니다. 이 경우 기존 M은 차단 고루틴을 중단 없이 처리할 수 있으므로 Go 스케줄러는 M을 추가로 생성하지 않습니다.

그러나 고루틴이 시스템 호출을 수행하거나 차단 작업을 만나면 해당 고루틴을 실행하는 M이 일시적으로 차단됩니다. 응답성을 유지하기 위해 스케줄러는 새 M을 생성하고 이를 새 P에 할당하여 보류 중인 고루틴을 실행합니다.

M과 P 관계

참고하는 것이 중요합니다. M과 P 사이에는 1:1 관계가 있습니다. 단일 M은 한 번에 하나의 P에서만 실행될 수 있으며 그 반대의 경우도 마찬가지입니다. M이 차단되면 스케줄러는 유휴 P를 검색합니다. 유휴 P가 없으면 새 P를 생성하여 대기 중인 M에 할당합니다.

추가 리소스

이 주제에 대한 자세한 내용은 다음을 참조하세요. 자료:

  • https://www.programmersought.com/article/79557885527/
  • go-goroutine-os-thread-and-cpu-management

Go 스케줄러가 새로운 M과 P를 생성하는 시기를 이해하는 것은 Go 애플리케이션을 최적화하는 데 중요합니다. 차단 작업의 가능성과 M과 P 간의 1:1 관계를 고려하여 효율적인 고루틴 관리를 위한 코드를 설계하고 사용 가능한 리소스 한도 내에서 동시성을 최대화할 수 있습니다.

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

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