>  기사  >  백엔드 개발  >  golang은 단일 프로세스인가요?

golang은 단일 프로세스인가요?

coldplay.xixi
coldplay.xixi원래의
2020-07-22 09:25:294212검색

golang은 단일 프로세스가 아니라 다중 스레드입니다. golang의 스레드 모델은 MPG 모델입니다. 일반적으로 Go 프로세스와 커널 스레드는 다대다 대응을 가지므로 우선 다중이어야 합니다. -스레드.

golang은 단일 프로세스인가요?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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