>  기사  >  백엔드 개발  >  golang은 멀티스레드 모드인가요?

golang은 멀티스레드 모드인가요?

coldplay.xixi
coldplay.xixi원래의
2020-07-22 09:31:365769검색

Golang은 멀티 스레드 모델입니다. golang의 스레드 모델은 MPG 모델입니다. 일반적으로 Go 프로세스와 커널 스레드는 다대다에 해당하므로 우선 멀티 스레드여야 합니다.

golang은 멀티스레드 모드인가요?

golang은 멀티 스레드 모드입니다.

gmp의 p와 m은 p를 m 커널 스레드에 바인딩하므로 p의 최대 개수는 GOPROCESS에 의해 결정되고 M 커널 스레드의 개수는 go에 의해 10K로 제한되지만 커널 이유로 인해 이보다 적습니다. 그 정도이므로 이 제한이 존재하지 않는 것처럼 처리하면 됩니다. 명확히 하기 위해 사진을 찍어보세요

golang은 멀티스레드 모드인가요?

Golang에는 소위 M 비율 N 모델이 있습니다. N go 루틴은 M 스레드에서 생성될 수 있습니다. 일반적으로 N은 M보다 훨씬 큽니다. 본질적으로 멀티 스레드 모델입니다. 그러나 코루틴의 일정은 Go의 런타임에 따라 결정되므로 개발자는 코루틴 간 동기화를 위해 채널을 사용해야 한다는 점이 강조되어 있습니다. runtime决定,强调开发者应该使用channel进行协程之间的同步。

至于线程,由于语言层面上不开放,你可以理解为其实是多协程模型,一个线程上可以创建若干个go routine,一般而言会创建与CPU核心数相同的线程数,当然实际上还是由runtime决定。

对于goroutine

스레드의 경우 언어레벨이 오픈되어 있지 않기 때문에 실제로는 멀티 코루틴 모델이라는 것을 알 수 있습니다. 일반적으로 하나의 스레드에 여러 개의 go 루틴을 생성할 수 있습니다. 물론 스레드 수는 실제로 런타임에 따라 결정됩니다.

goroutine의 스케줄링은 실제로 지속적으로 개발되고 변경됩니다. GMP 모델에 대해서만 이야기하겠습니다. 작업이 실행될 때마다 현재 P(프로세서)가 실행됩니다. ) 실행 가능한 큐에 실행 가능한 고루틴이 있습니다. 현재 P에 실행 가능한 고루틴이 없으면 다른 P의 실행 가능한 큐에 있는 고루틴을 훔칩니다.

이론적으로 고루틴 생성은 메모리에 의해서만 제한됩니다. 일반적으로 최대값은 2MB 공간의 스레드의 경우 이론적으로 쉽게 1,000에 도달할 수 있으므로 이는 이상적인 상황입니다. 생성된 고루틴 수가 증가해도 OS 스레드는 증가하지 않습니다. 스레드 스케줄링은 Go의 경우 상대적으로 성능 집약적입니다. 빈번한 일정 전환은 고루틴 간에만 존재하며 스레드는 CPU 수와 동일한 수의 활성 스레드만 유지합니다.

관련 학습 권장 사항:
Go 언어 튜토리얼🎜🎜🎜

위 내용은 golang은 멀티스레드 모드인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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