1장. 동시성 소개
무어의 법칙, 웹 스케일, 그리고 혼란
동시성이 어려운 이유
레이스 컨디션
원자성
메모리 접근 동기화
데드락, 라이브락, 기아 상태
데드락
라이브락
기아 상태
동시실행 안전성 판단
복잡성 속의 단순함
2장. 코드 모델링: 순차적인 프로세스간의 통신
동시성과 병렬성의 차이
CSP란 무엇인가?
동시성을 지원하는 언어의 장점
Go의 동시성에 대한 철학
3장. Go의 동시성 구성 요소
고루틴
sync 패키지
WaitGroup
Mutex와 RWMutex
Cond
Once
Pool
채널
select 구문
GOMAXPROCS 레버
결론
4장. Go의 동시성 패턴
제한
for-select 루프
고루틴 누수 방지
or-채널
에러 처리
파이프라인
파이프라인 구축의 모범 사례
몇몇 유용한 생성기
팬 아웃, 팬 인
or-done 채널
tee 채널
bridge 채널
대기열 사용
context 패키지
요약
5장. 확장에서의 동시성
에러 전파
시간 초과 및 취소
복제된 요청
속도 제한
비정상 고루틴의 치료
요약
6장. 고루틴과 고 런타임
작업 가로채기
작업 또는 연속 가로채기
이 모든 것을 개발자에게 보여주는 방법
결론
부록
고루틴 에러 분석
레이스 탐지
pprof
이 책의 대상 독자
Go 언어를 사용해본 경험이 있는 개발자를 대상으로 한다. 언어의 기본 문법에 대한 설명은 하지 않을 것이다. 다른 언어에서 동시성이 어떤 식으로 표현되는지 알고 싶다면 도움이 되겠지만 반드시 알 필요는 없다.
이 책에서는 Go 동시성 프로그래밍의 여러 주제에 관해 논한다. 흔히 나타나는 동시성 프로그래밍의 문제점이나 Go의 동시성을 디자인한 배경, Go의 동시성 기본요소 문법, 일반적인 동시성 패턴, 그리고 이 모든 과정을 도와주는 도구들을 다룰 것이다. 이 책은 광범위한 주제를 다루기 때문에 다양한 분야에 걸쳐 있는 사람들에게 유용할 것이다. ‘이 책의 구성’은 필요한 내용에 따라 이 책을 탐색하는 데 도움이 될 것이다.
이 책의 구성
기술 서적을 읽을 때 나는 관심이 있는 부분을 이리저리 건너 뛰면서 읽고는 한다. 혹은 업무를 위해서 새로운 기술을 익히려고 하는 경우, 일과 관련된 부분을 집중적으로 찾아본다. 당신이 어떤 식으로 이 책을 읽든 이 책의 로드맵이 당신이 원하는 곳에 이를 수 있도록 도움이 되기를 바란다.
1장, ‘동시성 소개’에서는 역사적인 관점에서 동시성이 왜 중요한 기능이 됐는지 알아보고, 동시성 프로그래밍을 정확하게 작성하는 것이 어려운 근본 원인에 대해 이야기한다. 그리고 Go 언어가 어떻게 이런 어려움을 덜어주는지 간략하게 다룬다. 만약 동시성에 대한 실무 지식이 있거나 Go의 동시성 기본 요소를 사용하는 방법에 대한 기술적인 측면에 관심이 있다면 이 장을 건너 뛰어도 무방하다.
2장, ‘코드 모델링: 순차적인 프로세스 간의 통신’에서는 Go 언어가 지금과 같이 디자인되는 데 동기를 부여한 요소를 다룬다. 이를 이해하면 Go 언어 커뮤니티에서 다른 사람과 대화하는 데 도움이 된다. 또한 Go 언어가 동작하는 원리를 이해하는 틀을 잡는 데도 도움이 된다.
3장, ‘Go의 동시성 구성요소’에서는 Go의 동시성 기본 요소의 문법을 깊이 살펴본다. 또한 Go의 메모리 접근 동기화를 담당하는 syn