본 장에서는 Go와 관련된 동시성 프로그래밍에 대해서만 서술한다.
공유 변수에 대한 정확한 접근을 구현하기 위해 엄수해야 하는 세세한 내용들은 다양한 환경에서 동시성 프로그래밍을 어렵게 함
Go는 공유 변수가 채널을 돌려가며 전달된다는 점에서 다른 접근을 권장함
공유 변수는 개별 쓰레드 실행에 의해 절대 공유되지 않음
항상 하나의 고루틴이 값에 접근함
데이터 경쟁은 구현 설계상 발생할 수 없음
이 같은 사고방식을 뜻하는 슬로건은 다음과 같음
접근을 제어하는 채널을 사용하면 분명하고 정확한 프로그램을 보다 쉽게 작성할 수 있음
이 모델에 대해 생각해보는 한가지 방법은 단일 CPU에서 실행되는 전형적인 단일 쓰레드 프로그램을 떠올려보는 것.
이 때는 동기화를 위한 기본 자료형이 필요없음
또 다른 단일 쓰레드 인스턴스를 실행했을 때에도 동기화가 필요하지 않음
이제 이 두 개의 쓰레드가 통신하게 되는데, 통신 자체가 동기화 장치(synchronizer)인 경우, 여전히 다른 동기화가 필요하지 않음