grokking concurrency!
복잡한 수식과 전문 용어를 몰라도 괜찮다! 읽기만 해도 동시성을 이해할 수 있다!
동시성은 프로그램을 독립적으로 실행하도록 분리해 동시에 처리하는 방식이며, 이를 구현하려면 복잡성, 병렬성, 스레드, 프로세스, 멀티태스킹, 코루틴처럼 다양한 기술과 개념을 알고 적재적소에 사용할 줄 알아야 한다. 이 책은 어렵게만 느껴지던 동시성을 실제 생활에서 흔히 볼 수 있는 예와 흥미로운 일러스트로 설명한다. 특정 프로그래밍 언어나 구현에 국한해 설명하지 않으며, 좀 더 근본적인 내용인 개념과 원칙을 학습하도록 도와준다. 특히 확실하게 이해하기 위해 복잡한 수식보다는 시각적인 다이어그램으로 개념을 쉽게 설명하며, 다양한 이야기로 독자의 흥미를 이끈다. 이 책을 읽고 나면 동시성에 대해 전체적인 그림을 그릴 수 있을 것이다.
PART I 문어 오케스트라: 동시성 교향곡 입문하기
CHAPTER 1 동시성이란 무엇인가
1.1 동시성의 중요성
1.2 동시성의 계층
1.3 이 책에서 배우게 될 내용
CHAPTER 2 순차 실행과 병렬 실행
2.1 돌아보기: 프로그램이란 무엇인가?
2.2 순차 실행
2.3 순차 컴퓨팅
2.4 병렬 실행
2.5 병렬 컴퓨팅을 위해 필요한 것
2.6 병렬 컴퓨팅
2.7 암달의 법칙
2.8 구스타프슨의 법칙
2.9 동시성 vs. 병렬성
CHAPTER 3 컴퓨터의 동작 원리
3.1 프로세서
3.2 런타임 시스템
3.3 컴퓨터 시스템의 구조
3.4 동시 하드웨어의 여러 수준
CHAPTER 4 동시성을 구현하는 재료
4.1 동시성 프로그래밍의 단계
4.2 프로세스
4.3 스레드
CHAPTER 5 프로세스 간 통신
5.1 다양한 통신 방식
5.2 스레드 풀 패턴
5.3 패스워드 크랙하기: 파트 2
PART II 동시성을 다루는 촉수의 종류: 멀티태스킹, 분해, 동기화
CHAPTER 6 멀티태스킹
6.1 CPU 중심과 입출력 중심
6.2 멀티태스킹이 필요한 이유
6.3 멀티태스킹: 조감도
6.4 멀티태스킹 환경
CHAPTER 7 작업 분해하기
7.1 의존 관계 분석하기
7.2 작업 분해
7.3 작업 분해: 파이프라인 패턴
7.4 데이터 분해
7.5 분해된 작업의 크기 결정하기
CHAPTER 8 동시성과 관련된 문제 해결하기: 경쟁 조건과 동기화
8.1 공유 자원
8.2 경쟁 조건
8.3 동기화
CHAPTER 9 동시성과 관련된 문제 해결하기: 교착 상태와 기아 상태
9.1 철학자들의 만찬 문제
9.2 데드락
9.3 라이브락
9.4 기아 상태
9.5 동기화 설계하기
9.6 그 외의 주제
PART III 비동기적으로 움직이는 문어들: 여러 판의 피자를 동시에 만들기
CHAPTER 10 논블로킹 I/O
10.1 분산 컴퓨팅의 세계
10.2 클라이언트-서버 모델
10.3 피자 주문 서비스
10.4 블로킹 I/O
10.5 논블로킹 I/O
CHAPTER 11 이벤트 기반 동시성
11.1 이벤트란?
11.2 콜백
11.3 이벤트 반복문
11.4 입출력 멀티플렉싱
11.5 이벤트 기반으로 구현된 피자 서버
11.6 리액터 패턴
11.7 메시지 전달 동기화하기
11.8 여러 가지 입출력 모델
CHAPTER 12 비동기 통신
12.1 비동기성이 필요한 이유
12.2 비동기 프로시저 호출
12.3 협동형 멀티태스킹
12.4 퓨처 객체
12.5 협동적 멀티태스킹을 적용한 피자 서버
12.6 비동기 피자 식당
12.7 결론: 비동기 모델
CHAPTER 13 실전: 동시적 애플리케이션 작성하기
13.1 그래서 동시성이 뭐였더라?
13.2 포스터 기법
13.3 행렬 곱 연산
13.4 분산 단어 세기
ㆍ지은이 키릴 보브로프
ㆍ옮긴이 심효섭
독자의견 남기기