Go Chan 분석 & 런타임 관측

개요 이 글의 목표는 Go 채널을 사용법만 나열하는 것이 아니라, 런타임 내부 구조를 따라가며 왜 그렇게 동작하는지 이해하는 것입니다. 앞부분에서는 chan.go의 생성, 송수신, 버퍼 구조를 읽고, 뒷부분에서는 내부 스케줄 정책을 바꾸지 않은 채 관측 훅을 붙여 채널이 GMP 대기 경로와 실제 로직이 어떻게 맞닿는지 실험으로 확인합니다. 런타임 코드 인용 기준은 go1.26.5의 src/runtime/chan.go입니다. send/recv의 큰 흐름은 이전 버전과 같되, hchan에 timer 채널과 synctest용 필드가 추가된 점만 구분해서 보면 됩니다. Go Chan Go에서 채널은 고루틴(Goroutine) 간에 데이터를 주고받고 실행을 동기화하기 위한 파이프로, 통신/차단/동기화 등을 할 수 있습니다. 채널의 철학은 “통신을 통한 메모리 공유(Do not communicate by sharing memory; instead, share memory by communicating)“로 정리되죠. ...

July 28, 2026 · 17 min · DSeung001