IT Share you

Go 채널은 어떻게 구현 되나요?

shareyou 2020. 12. 12. 12:43
반응형

Go 채널은 어떻게 구현 되나요?


Go 언어 사양, 효과적인 Go 및 Go 메모리 모델을 (간단하게) 검토 한 후에도 Go 채널이 내부에서 어떻게 작동하는지에 대해서는 여전히 약간 불분명합니다.

그들은 어떤 종류의 구조입니까? 그들은 스레드로부터 안전한 큐 / 배열처럼 작동합니다.

구현이 아키텍처에 따라 달라 집니까?


채널의 소스 파일은 (go 소스 코드 루트에서) /src/pkg/runtime/chan.go에 있습니다.

hchan연결 목록 (고 루틴 및 데이터 요소에 대한 포인터 보유) 및 closed플래그 를 전송 및 수신하는 채널의 중앙 데이터 구조입니다 . Lockruntime2.go에 정의되고 OS에 따라 뮤텍스 (futex) 또는 세마포어 역할을 하는 임베디드 구조가 있습니다. 잠금 구현은 빌드 태그를 기반으로 lock_futex.go (Linux / Dragonfly / Some BSD) 또는 lock_sema.go (Windows / OSX / Plan9 / Some BSD)에 있습니다.

채널 작업은 모두이 chan.go 파일에 구현되어 있으므로 makechan, 전송 및 수신 작업은 물론 select 구성, close, len 및 cap 내장 기능을 볼 수 있습니다.

채널의 내부 작동에 대한 심층적 인 설명을 보려면 Dmitry Vyukov 자신이 만든 스테로이드대한 Go 채널 (Go 핵심 개발, 고 루틴, 스케줄러 및 채널)을 읽어야합니다.


다음은 채널이 어떻게 구현되는지 대략적으로 설명하는 좋은 강연입니다.
https://youtu.be/KBZlN0izeiY

토크 설명 :

GopherCon 2017 : Kavya Joshi-채널 이해

채널은 고 루틴이 통신 할 수있는 간단한 메커니즘과 정교한 동시성 패턴을 구축하는 강력한 구조를 제공합니다. 런타임 스케줄러 및 메모리 관리 시스템에서 지원하는 방식을 포함하여 채널 및 채널 작업의 내부 작업에 대해 알아 봅니다.

참고 URL : https://stackoverflow.com/questions/19621149/how-are-go-channels-implemented

반응형