이미 소장하고 있다면 판매해 보세요.
|
1장 소개
1.1 공유 객체와 동기화 1.2 우화 1.3 생산자-소비자 문제 1.4 독자-저자 문제 1.5 병렬화의 잔혹한 현실 1.6 병렬 프로그래밍 1.7 일러두기 1.8 연습문제 2장 상호 배제 2.1 시간 2.2 임계영역 2.3 2-스레드 해법 2.4 필터 잠금 2.5 공정성 2.6 램포트의 빵집 알고리즘 2.7 유한 타임스탬프 2.8 (메모리) 위치 개수에 대한 하한 2.9 일러두기 2.10 연습문제 3장 병행 객체 3.1 병행성과 정확성 3.2 순차 객체 3.3 정지 무모순성 3.4 순차 무모순성 3.5 선형화 가능성 3.6 수학적 정의 3.7 진행조건 3.8 Java 메모리 모델 3.9 주의할 것 3.10 일러두기 3.11 연습문제 4장 공유 메모리의 기초 4.1 레지스터의 공간 4.2 레지스터 만들기 4.3 원자적인 스냅샷 4.4 일러두기 4.5 연습문제 5장 동기화 연산 요소들의 상대적인 능력 5.1 합의 수 5.2 원자적인 레지스터 5.3 합의 프로토콜 5.4 FIFO 큐 5.5 다중 대입 객체 5.6 읽기-변경-쓰기 연산 5.7 Common2 RMW 연산 5.8 CAS 연산 5.9 일러두기 5.10 연습문제 6장 합의의 만능성 6.1 소개 6.2 만능성 6.3 무잠금 만능 구성 6.4 무대기 만능 구성 6.5 일러두기 6.6 연습문제 7장 스핀락과 경쟁 7.1 현실 세계에 온 것을 환영한다 7.2 test-and-set 잠금 7.3 TAS 기반의 잠금 재검토 7.4 지수적인 백오프 7.5 큐 잠금 7.6 시간제한이 있는 큐 잠금 7.7 복합 잠금 7.8 계층적 잠금 7.9 모든 상황을 처리할 수 있는 하나의 잠금 7.10 일러두기 7.11 연습문제 8장 모니터와 멈춤 동기화 8.1 소개 8.2 모니터 잠금과 조건 변수 8.3 독자-저자 잠금 8.4 직접 만든 재진입성 잠금 8.5 세마포어 8.6 일러두기 8.7 연습문제 9장 연결리스트: 잠금의 역할 9.1 소개 9.2 리스트로 만든 집합 9.3 병행 추론 9.4 성긴 동기화 9.5 세밀한 동기화 9.6 낙천적인 동기화 9.7 게으른 동기화 9.8 비멈춤 동기화 9.9 토의 9.10 일러두기 9.11 연습문제 10장 병행 큐와 ABA 문제 10.1 소개 10.2 큐 10.3 제한된 부분 큐 10.4 무제한 완전 큐 10.5 무제한 무잠금 큐 10.6 메모리 재사용과 ABA 문제 10.7 이중 자료구조 10.8 일러두기 10.9 연습문제 11장 병행 스택과 소거 11.1 소개 11.2 무제한 무잠금 스택 11.3 소거 11.4 소거 백오프 스택 11.5 일러두기 11.6 연습문제 12장 숫자 세기, 정렬 그리고 분산 협조 12.1 소개 12.2 공유된 세기 12.3 소프트웨어 결합 12.4 정지 무모순한 풀과 카운터 12.5 계산 네트워크 12.6 회절 트리 12.7 병렬 정렬 12.8 정렬 네트워크 12.9 샘플 정렬 12.10 분산 협조 12.11 일러두기 12.12 연습문제 13장 병행 해시와 자연적인 병렬성 13.1 소개 13.2 닫힌 주소법 해시 집합 13.3 무잠금 해시 집합 13.4 열린 주소법 해시 집합 13.5 일러두기 13.6 연습문제 14장 스킵리스트와 균형 잡힌 검색 14.1 소개 14.2 순차 스킵리스트 14.3 잠금 기반의 병행 스킵리스트 14.4 무잠금 병행 스킵리스트 14.5 병행 스킵리스트 14.6 일러두기 14.7 연습문제 15장 우선순위 큐 15.1 소개 15.2 배열 기반의 제한된 우선순위 큐 15.3 트리 기반의 제한된 우선순위 큐 15.4 힙 기반의 무제한 우선순위 큐 15.5 스킵리스트 기반의 무제한 우선순위 큐 15.6 일러두기 15.7 연습문제 16장 미래, 스케줄링, 그리고 작업 분배 16.1 소개 16.2 병렬성 분석 16.3 현실적인 다중프로세서 스케줄링 16.4 작업 분배 16.5 작업 훔치기 덱 16.6 일러두기 16.7 연습문제 17장 배리어 17.1 소개 17.2 배리어 구현 17.3 센스리버싱 배리어 17.4 트리 결합 배리어 17.5 정적 트리 배리어 17.6 종료 감지 배리어 17.7 일러두기 17.8 연습문제 18장 트랜잭션 메모리 18.1 소개 18.2 트랜잭션과 원자성 18.3 소프트웨어 트랜잭션 메모리 18.4 하드웨어 트랜잭션 메모리 18.5 일러두기 18.6 연습문제 부록 A 소프트웨어의 기초 A.1 소개 A.2 Java A.3 C# A.4 Pthreads A.5 일러두기 부록 B 하드웨어의 기초 B.1 소개(와 수수께끼) B.2 프로세서와 스레드 B.3 인터커넥트 B.4 메모리 B.5 캐시 B.6 캐시를 고려한 프로그래밍 또는 수수께끼는 풀렸다! B.7 다중코어와 다중스레드 구조 B.8 하드웨어 동기화 명령 B.9 일러두기 B.10 연습문제 참고문헌 찾아보기 |
|
생각을 바꾸는 다중코어 프로그래밍
컴퓨터 산업은 속도 경쟁을 포기했고, 단일코어에서 다중코어 경쟁으로 돌아섰다. 이런 변화는 프로그래밍 방법에 근본적인 변화를 가져왔다. 이제 하드웨어를 업그레이드하면 프로그램이 빨라지던 시대는 끝났다. 다중코어를 활용하지 못하면 프로그램은 더 빨라지지 않는다. 지금까지 단일코어 중심으로 해왔던 프로그래밍이 아닌 다중코어 중심으로 프로그래밍해야 한다. 프로세서 간에는 어떻게 통신해야 하는지, 다중코어는 어떻게 동기화해야 하는지와 같은 다양한 문제가 남아 있다. 다중코어 환경에서 프로그램을 어떻게 작성해야 하고, 위와 같은 문제를 어떻게 해결해야 하는지, 자료 구조는 어떻게 디자인해야 하는지 명확하게 밝힌 첫 번째 책이다. 이 책을 통해 독자는 지금까지 문제 해결을 위해 동료나 선배들에게 물어서 알아낸 트릭이나 지루한 시행착오를 없애고 올바르게 다중코어 프로그램을 작성하는 데 필요한 원칙과 도구를 학습하게 된다. 여러 스레드가 공유 메모리에 접근하는 프로그래밍의 기초를 차근차근 학습한다. 현대 다중 프로세서가 어떻게 병행 프로그래밍을 지원하는지 자세히 설명한다. 현재 가장 주류인 자료 구조들을 자세히 살펴보며 각각의 핵심 디자인을 알아본다. 잠금에서부터 최첨단의 트랜잭션 메모리 시스템에 이르기까지의 동기화 기술을 완벽하고 면밀하게 설명한다. Java Concurrency 패키지를 사용한 완전히 동작하는 자바 예제를 제공한다. 부록으로 하드웨어와 다른 프로그래밍 언어나 패키지를 사용한 프로그래밍에 관한 배경 자료를 제공한다. C#이나 Pthreads 라이브러리를 사용한 C, C++에 대한 내용을 포함한다. |