18 채널(Channel)
동기 채널
동기 채널은 이름만 보아도 알 수 있듯이 비동기 채널과 상반되는 개념입니다. 원래는 동기 채널이 채널의 기본 형태지만, 비동기 채널과 버퍼의 사용을 먼저 학습하고 그 차이를 분명하게 느끼면 동기 채널에 대한 개념이 확실해질 것 같아 순서를 바꿔서 설명하게 됐습니다. Go 채널의 기본을 학습할 때 한개의 송신자와 한 개의 수신자가 채널을 통해 데이터를 주고 받았습니다. 이때, 수신자와 송신자가 일대일 대응을 하지 않으면 한쪽에서 무한 대기 상태가 된다고 했습니다. 그래서 수신자와 송신자가 여러개일 때 효율적으로 데이터를 주고 받는 방법으로 비동기 채널에서 버퍼 사용에 관해 배웠습니다.
동기 채널은 단순히 송/수신 채널이 여러개여서 송신 루틴과 수신 루틴이 번갈아가면서 실행되는 것을 말합니다. 채널의 기본 개념에서 벗어나지 않으니 바로 코드를 실행해보고 알아보겠습니다.
잠금 영역
실행 언어: go실행 결과를 확인해보세요!
위 코드는 단순히 채널로 데이터를 송신하고 수신함으로써 루틴을 왔다갔다 하며 실행하는 것을 보여줍니다. 그 모습이 눈에 보이게 하기위해 수신 루틴인 main() 함수 마지막에 time.Sleep(time.Second)
을 입력했습니다.

동기 채널 방식을 사용하면 송신자는 수신자가 데이터를 수신할 때까지 대기하고, 수신자는 송신자가 데이터를 송신할 때까지 대기합니다. 따라서 위 그림과 같이 고루틴의 흐름을 제어할 수 있습니다.