>백엔드 개발 >Golang >golang에서 높은 동시성을 달성하는 방법은 무엇입니까?

golang에서 높은 동시성을 달성하는 방법은 무엇입니까?

coldplay.xixi
coldplay.xixi원래의
2020-07-18 16:05:287293검색

Golang의 높은 동시성 달성 방법: 먼저 M은 커널 스레드와 연결되고 스케줄러 P에 의해 1개 이상의 G를 연결하도록 예약된 다음 M과 P, N G 간의 일대일 관계를 기반으로 합니다. 마지막으로 커널 스레드와 G 간의 다대다 관계가 실현됩니다[M:N].

golang에서 높은 동시성을 달성하는 방법은 무엇입니까?

golang에서 높은 동시성을 달성하는 방법:

go 언어는 MPG 모드를 사용하여 CSP를 구현합니다

동영상 강좌 추천 →: "천만 수준 데이터 동시성 솔루션(이론 + 실습) "

기존 동시성에서는 많은 스레드를 시작하면 CPU 및 메모리의 오버헤드만 증가합니다. 스레드가 너무 많으면 컴퓨터 하드웨어 리소스를 많이 소비하여 동시성 양에 병목 현상이 발생합니다.

  • M은 Machine을 나타냅니다. M은 커널 스레드와 직접 연결됩니다. M指的是Machine,一个M直接关联了一个内核线程。

  • P指的是”processor”,代表了M所需的上下文环境,也是处理用户级代码逻辑的处理器。

  • G

P는 "프로세서"를 의미하며 M이 요구하는 컨텍스트 환경을 나타내며 사용자 수준의 코드 로직을 처리하는 프로세서이기도 합니다.

golang에서 높은 동시성을 달성하는 방법은 무엇입니까?

G는 실제로 가벼운 스레드인 고루틴을 의미합니다.

개인적인 이해: M은 스케줄러 P(컨텍스트)의 스케줄링을 통해 하나 이상의 G에 연결할 수 있으며 이는 커널 스레드를 N개의 사용자 스레드로 나누는 것과 같습니다. , M과 P는 일대일 관계이지만(실제 스케줄링에서는 관계가 변경됨) P를 통해 N G가 스케줄링되고(P와 G는 일대다 관계임) 다대다 관계가 됩니다. 커널 스레드와 G 사이가 실현됩니다(M:N). 이 방법을 통해 하나의 커널 스레드는 N개의 고루틴을 시작할 수 있으며, 동일한 하드웨어 구성을 가진 시스템에서 사용할 수 있는 사용자 스레드 수가 기하급수적으로 증가하고 동시성이 크게 향상됩니다. . 🎜🎜🎜관련 학습 권장 사항: 🎜Go 언어 튜토리얼🎜🎜🎜

위 내용은 golang에서 높은 동시성을 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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