golang은 단일 프로세스가 아니라 다중 스레드입니다. golang의 스레드 모델은 MPG 모델입니다. 일반적으로 Go 프로세스와 커널 스레드는 다대다 대응을 가지므로 우선 다중이어야 합니다. -스레드.
golang은 단일 프로세스가 아니라 다중 스레드입니다.
Golang에는 소위 M 비율 N 모델이 있습니다. N go 루틴은 M 스레드에서 생성될 수 있습니다. 일반적으로 N은 M보다 훨씬 큽니다. 본질적으로 멀티 스레드 모델이지만 코루틴의 일정이 결정됩니다. Go의 런타임에 따라 강조 개발자는 코루틴 간의 동기화를 위해 채널을 사용해야 합니다.
스레드의 경우 언어레벨이 오픈되어 있지 않기 때문에 실제로는 멀티 코루틴 모델이라는 것을 알 수 있습니다. 일반적으로 하나의 스레드에 여러 개의 go 루틴
을 생성할 수 있습니다. 물론 스레드 수는 실제로 런타임
에 따라 결정됩니다. go routine
,一般而言会创建与CPU核心数相同的线程数,当然实际上还是由runtime
决定。
对于goroutine
goroutine
의 스케줄링은 실제로 지속적으로 개발되고 변경됩니다. GMP 모델에 대해서만 이야기하겠습니다. 작업이 실행될 때마다 현재 P(프로세서)가 실행됩니다. ) 실행 가능한 큐에 실행 가능한 고루틴이 있습니다. 현재 P에 실행 가능한 고루틴이 없으면 다른 P의 실행 가능한 큐에 있는 고루틴을 훔칩니다. 이론적으로 고루틴 생성은 메모리에 의해서만 제한됩니다. 일반적으로 최대값은 2MB 공간의 스레드의 경우 이론적으로 쉽게 1,000에 도달할 수 있으므로 이는 이상적인 상황입니다. 생성된 고루틴 수가 증가해도 OS 스레드는 증가하지 않습니다. 스레드 스케줄링은 Go의 경우 상대적으로 성능 집약적입니다. 빈번한 일정 전환은 고루틴 간에만 존재하며 스레드는 CPU 수와 동일한 수의 활성 스레드만 유지합니다. 🎜관련 학습 권장 사항: Go 언어 튜토리얼
위 내용은 golang은 단일 프로세스인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!