> 일반적인 문제 > golang 스레드와 코루틴의 차이점은 무엇입니까?

golang 스레드와 코루틴의 차이점은 무엇입니까?

DDD
풀어 주다: 2023-06-16 13:15:40
원래의
1164명이 탐색했습니다.

golang 스레드와 코루틴의 차이점: 1. 다양한 예약 방법, 스레드는 CPU 시간 분할에 따라 선제적으로 예약되고 코루틴은 go 언어 런타임 스케줄러에 의해 예약됩니다. 2. 예약 전략이 다르며 스레드가 선제적으로 예약됩니다. 3. 컨텍스트 전환 속도는 다르며 스레드 전환 속도는 약 1~2마이크로초이고 코루틴 전환 속도는 약 0.2마이크로초입니다. 4. 스택 크기가 다르며 스레드 스택 크기는 일반적으로 8MB입니다. go 코루틴 스택 크기의 기본값은 2KB입니다.

golang 스레드와 코루틴의 차이점은 무엇입니까?

이 기사의 운영 환경: Windows 10 시스템, go1.20 버전, dell g3 컴퓨터.

golang 스레드와 코루틴의 차이점:

1. 스케줄링 방법

스레드: 스레드는 CPU 시간 분할을 기준으로 선제적으로 예약됩니다. 운영체제는 인터럽트 신호(타이머 인터럽트, I/O 장치 인터럽트 등)를 통해 스레드 컨텍스트 전환을 수행합니다. 스레드 컨텍스트 전환이 발생하면 운영 체제 사용자 모드에서 커널 모드로 전환해야 하며, 다음 실행 스레드로 전환할 때 상태 정보를 로드하여 커널 모드로 전송해야 합니다. 커널 모드를 운영 체제 사용자 모드로 변경합니다.

코루틴: 코루틴은 사용자 모드에 존재하며 Go 언어 런타임 스케줄러에 의해 예약됩니다. 코루틴은 특정 스레드에 속하며, 하나의 코루틴을 여러 스레드로 전환하여 실행할 수도 있습니다. 따라서 코루틴과 스레드는 다대다(M:N) 관계를 갖습니다.

2. 스케줄링 전략

스레드: 선제적 스케줄링. 각 스레드의 실행 주기 균형을 맞추기 위해 운영 체제 스케줄러는 스레드 컨텍스트 전환을 강제하기 위해 주기적으로 인터럽트 신호를 보냅니다.

코루틴: 협업 일정 관리. 코루틴은 자체 작업 처리를 마친 후 실행 권한을 다른 코루틴에 적극적으로 전달할 수 있으며 쉽게 선점되지 않습니다. 코루틴이 너무 오랫동안 실행된 후에만 Go 언어 스케줄러가 강제로 코루틴 실행을 선점합니다.

3. 컨텍스트 전환 속도

스레드: 스레드 컨텍스트 전환을 위해서는 운영 체제 사용자 모드와 커널 모드 간 전환이 필요하며 전환 속도는 약 1~2 마이크로초입니다.

코루틴: 코루틴은 사용자 모드의 경량 스레드입니다. 코루틴 전환에는 사용자 모드와 커널 모드 간 전환이 필요하지 않으며 전환 중에 몇 가지 상태 값만 저장하면 되므로 전환 속도가 몇 배나 됩니다. 약 0.2 마이크로초 더 빠릅니다. (스레드 전환 속도보다 약 10배 빠릅니다.)

4. 스택 크기

스레드: 스레드의 스택 크기는 일반적으로 생성 시 지정됩니다. Linux 및 Mac의 기본 스택 크기는 일반적으로 8MB입니다. ulimit -s 보기를 전달할 수 있습니다). 2000개의 스레드에는 16G의 가상 메모리가 필요합니다.

코루틴: 기본 Go 코루틴 스택 크기는 2KB이며, 16G 가상 메모리는 8백만 개 이상의 코루틴을 생성할 수 있습니다. 실제로 수천 개의 코루틴이 존재하는 것을 흔히 볼 수 있습니다.

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

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