> 일반적인 문제 > golang의 코루틴이란 무엇입니까?

golang의 코루틴이란 무엇입니까?

小老鼠
풀어 주다: 2023-06-20 16:16:42
원래의
1021명이 탐색했습니다.

golang의 코루틴은 고루틴입니다. 차이점은 Golang이 런타임 및 시스템 호출과 같은 여러 측면에서 고루틴 스케줄링을 캡슐화하고 처리한다는 것입니다. 장기 실행이나 시스템 호출이 발생하면 현재 고루틴의 CPU가 이를 적극적으로 전송합니다. Golang은 기본적으로 언어 수준에서 코루틴을 지원하므로 함수나 메서드 앞에 go 키워드를 추가하면 됩니다.

golang의 코루틴이란 무엇입니까?

이 튜토리얼의 운영 환경: Windows 10 시스템, go1.20.1 버전, Dell G3 컴퓨터.

코루틴(사용자 수준 스레드)의 경우 이는 커널에 투명합니다. 즉, 시스템은 코루틴의 존재를 알지 못하고 사용자 프로그램 자체에 의해 제어되기 때문에 당나귀 자체 프로그램에 의해 완전히 예약됩니다. , 선점형 스케줄링과 같이 CPU 제어를 다른 프로세스/스레드로 강제 전환하는 것은 어렵습니다. 일반적으로 코루틴은 다른 코루틴이 실행되기 전에 제어를 적극적으로 전송해야 합니다.

고루틴과 코루틴의 차이점

기본적으로 고루틴은 코루틴입니다. 차이점은 Golang은 런타임, 시스템 호출 등 여러 측면에서 고루틴 스케줄링을 캡슐화하고 처리한다는 점입니다. 장기 실행이나 시스템 호출이 발생하면 현재 고루틴의 CPU(P)를 다른 고루틴으로 적극적으로 이전할 수 있습니다. 예약되고 실행됩니다. 이는 Golang이 언어 수준에서 코루틴을 지원한다는 것을 의미합니다. Golang의 주요 기능은 기본적으로 언어 수준에서 코루틴을 지원한다는 것입니다. 함수나 메서드 앞에 go 키워드를 추가하여 코루틴을 만들 수 있습니다.

다른 측면에서의 비교

1. 메모리 소비 측면에서

각 go-routine(코루틴)은 기본적으로 Java 및 C 스레드보다 훨씬 적은 메모리를 차지합니다.

고루틴 2KB.

스레드: 8MB.

2. 스레드와 go-routine 전환을 위한 스케줄링 오버헤드의 측면에서

thread/go-routine 전환 오버헤드 측면에서 go-routine은 스레드보다 훨씬 작습니다.

스레드: 모드 전환(사용자 모드에서 커널 모드로 전환), 16개 레지스터 새로 고침, PC, SP.. 및 기타 레지스터 등이 포함됩니다.

go-routine: 세 개의 레지스터 값만 수정됩니다 - PC/SP/DX.

2. 코루틴의 기본 구현 원리

스레드는 운영 체제의 커널 개체입니다. 멀티 스레드 프로그래밍 중에 스레드가 너무 많으면 컨텍스트 전환이 자주 발생하고 이러한 CPU 시간은 추가 비용이 발생합니다. 따라서 일부 동시성 네트워크 서버 프로그래밍에서는 스레드를 사용하여 소켓 연결을 제공하는 것은 현명하지 않습니다. 따라서 운영 체제는 이벤트 패턴을 기반으로 하는 비동기 프로그래밍 모델을 제공합니다. 많은 수의 네트워크 연결 및 /0 작업을 처리하려면 적은 수의 스레드를 사용하십시오. 그러나 비동기 및 이벤트 기반 프로그래밍 모델을 사용하면 프로그램 코드 작성이 복잡해지고 오류가 발생하기 쉽습니다. 스레드가 인터리브되기 때문에 오류 문제 해결이 더 어려워집니다.

코루틴은 애플리케이션 계층에서 시뮬레이션된 스레드로, 컨텍스트 전환에 따른 추가 비용을 피하고 멀티스레딩의 장점을 고려합니다. 동시성 프로그램의 복잡성을 단순화합니다. 예를 들어 동시성이 높은 네트워크 서버에서는 각 소켓이 연결되고 서버는 코루틴을 사용하여 이를 제공합니다. 코드는 매우 명확합니다. 그리고 성능을 고려합니다.

위 내용은 golang의 코루틴이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿