장바구니 담기 close

장바구니에 상품을 담았습니다.

C++ 멀티스레딩 정복하기

C++ 멀티스레딩 정복하기

  • 마야포쉬
  • |
  • 에이콘출판
  • |
  • 2018-11-23 출간
  • |
  • 304페이지
  • |
  • 188 X 235 mm
  • |
  • ISBN 9791161752365
판매가

25,000원

즉시할인가

22,500

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

수량
+ -
총주문금액
22,500

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평




★ 이 책에서 다루는 내용 ★
■ 다양한 운영체제가 현재 멀티스레딩을 구현하는 방식
■ 새로운 애플리케이션의 설계 시 최적의 멀티스레딩 API 선택
■ 뮤텍스와 스핀락의 사용, 그 외의 동기화 개념 파악
■ 스레드 간의 안전한 데이터 전달 방법
■ 다양한 C++ 툴체인이 제공하는 API 지원 수준
■ 멀티스레드 코드의 일반적인 문제 해결 및 빠지기 쉬운 함정 파악
■ 원자적 동작의 본질을 이해하고 이들을 코드 최적화에 유용하게 사용할 수 있는 방법
■ 분산 컴퓨팅 환경에서의 멀티스레드 애플리케이션 구현
■ 멀티스레딩을 채택한 C++ 기반의 GPGPU 애플리케이션 설계

★ 이 책의 대상 독자 ★
멀티스레딩과 병행적 처리에 대한 지식을 넓히고자 하는 C++ 중급 개발자를 대상으로 한다. 이 책을 보려면 멀티스레딩에 대한 기본적 경험이 있어야 하고 명령행에서 C++ 개발 툴체인을 다루는 데 익숙해야 한다.

★ 이 책의 구성 ★
1장, ‘멀티스레딩 검토’에서는 C++에서의 멀티스레딩을 요약하고 숙지하고 있어야 할 개념을 살펴본다. C++의 2011년 개정안에 추가된 네이티브 스레딩 지원을 사용하는 기본 멀티스레딩 예제를 살펴본다.
2장, ‘프로세서와 OS에서의 멀티스레딩 구현’에서는 1장에서 논의한 하드웨어 구현에서 제공되는 기본 기능을 바탕으로, OS가 어떻게 이들 기능을 사용해 애플리케이션에서 이들을 이용하는지 알아본다. 애플리케이션과 스레드가 서로 간섭하지 않도록 프로세스와 스레드가 메모리와 프로세서를 사용하는 방법도 논의한다.
3장, ‘C++ 멀티스레딩 API’에서는 OS 수준의 API(Win32와 POSIX 등)와 프레임워크(Boost와 Qt, POCO 등)에서 제공되는 다양한 멀티스레딩 API를 알아본다. 이들 각 API를 실행, 다른 API와 비교해 그 차이점을 알아보고 독자의 애플리케이션에서 가질 수 있는 장단점을 살펴본다.
4장, ‘스레드 동기화와 통신’에서는 앞서 배운 주제에 대해 C++ 14 버전의 네이티브 스레딩 API를 사용해 구현된 고급 멀티스레딩 구현을 알아본다. 이를 통해 여러 스레드가 스레드 안전성 문제없이 통신할 수 있는 방법을 이해한다. 뮤텍스와 락, 조건 변수를 포함한 여러 유형의 동기화 메커니즘 간의 차이점도 다룬다.
5장, ‘네이티브 C++ 스레드와 기본 요소’에서는 스레드와 병행성, 로컬 스토리지를 비롯해 이 API에서 지원되는 스레드 안전성을 다룬다. 4장의 예제에 바탕을 두고 C++ 11과 C++ 14 버전의 완전한 기능 세트에 의해 제공되는 기능을 사용해 스레드 안전성을 확장하고 최적화하는 방법을 알아본다.
6장, ‘멀티스레드 코드의 디버깅’에서는 애플리케이션의 멀티스레드 성능을 분석하고 핫스팟을 탐지하며, 병행적 접근으로 발행하는 문제를 해결하고 방지하기 위해 Valgrind(Memcheck와 DRD, Helgrind 등) 같은 툴을 사용하는 방법을 습득한다.
7장, ‘모범 실전 사례’에서는 흔히 겪는 함정과 난제를 다룬다. 문제를 유발하기 전에 사전에 파악하는 방법을 알아본다. 또한 예제를 이용해 몇 가지 일반적인 상황과 예외적인 상황을 살펴본다.
8장, ‘원자적 동작 - 하드웨어와 작업하기’에서는 원자적 동작에 대해 세부적으로 다룬다. 원자적 동작이 무엇이며 최적으로 사용하는 방법을 알아본다. 여러 CPU 아키텍처에서 어떤 컴파일러 지원이 이뤄지는지 살펴보고 코드에 원자적 동작을 구현할 때 시간을 투자할 가치가 있는지 평가해본다. 또한 이런 최적화로 인해 코드의 이식성이 어떻게 제한되는지 알아본다.
9장, ‘분산 컴퓨팅에서의 멀티스레딩’에서는 이전 장들에서 배운 여러 내용을 멀티시스템과 클러스터 수준의 시스템에 적용해본다. OpenMPI 기반의 예제를 이용해 컴퓨터 클러스터 내의 노드같이 여러 시스템에서 멀티스레딩을 수행하는 방법을 알아본다.
10장, ‘GPGPU에서의 멀티스레딩’에서는 GPGPU 애플리케이션(CUDA와 OpenCL 등)에서 멀티스레딩 사용법을 살펴본다. OpenCL 기반의 예제를 사용해 병렬로 작업을 실행하는 기본적인 멀티스레드 애플리케이션을 알아본다. 이전 장들에서 배운 내용을 비디오 카드와 그 파생 하드웨어(예를 들어 랙-마운트(rack-mounted) 벡터 프로세서 하드웨어)에서 처리할 수 있도록 이를 적용한다.

★ 옮긴이의 말 ★
언젠가부터 멀티스레드가 없는 애플리케이션 개발을 상상하기 힘들어졌다. 제한된 컴퓨팅 환경에서 주어진 특정 작업을 가장 효율적으로 수행하는 여러 방식 가운데, 멀티스레드는 병행성과 병렬성 측면에서 가장 뛰어난 프로그램 기법 중 하나일 것이다. 이 책은 멀티스레딩과 병행성의 기본 개념을 파악하고 이를 C++에 효율적으로 적용하는 방법을 알려준다.
또한 멀티스레딩의 안전하고도 효율적인 구현을 위해 필수적인 내용을 다룬다. 즉, 운영체제와 프레임워크가 이들에 대한 저수준 함수를 이용하는 방법과 함께 이들 개념이 하드웨어 수준에서 동작하는 방법을 심도 있게 다루며, 스레드 간 동기화와 통신, 병행성 C++ 애플리케이션의 디버깅, C++에서 가장 모범적인 프로그래밍 사례 등을 다룬다.
마지막으로 원자적 동작의 본질을 이해하고 이들을 코드 최적화에 유용하게 사용할 수 있는 방법을 습득하며, 분산 컴퓨팅 환경에서 멀티스레드 애플리케이션을 구현하고 멀티스레딩을 채택한 C++ 기반의 GPGPU 애플리케이션 설계 방법을 익힌다. 특히, 10장에서 다루는 GPGPU 애플리케이션 설계 방법은 최근 비트코인 채굴과 관련해 그래픽 카드의 품귀 현상과도 그 궤를 같이한다는 점에서 주목할 만하다.
이 책은 그 분량에 비해 다루는 내용의 심도와 주제가 상당히 광범위하며 때론 포괄적이고도 때론 매우 정교하다. 개발자 여러분, 이제 준비가 되었다면 안전띠를 단단히 조이고 멋진 질주를 시작해보자!


목차


1장. 멀티스레딩 검토
__시작하기
__멀티스레드 애플리케이션
____메이크파일
__그 밖의 애플리케이션
__요약

2장. 프로세서와 OS에서의 멀티스레딩 구현
__프로세스와 스레드의 정의
____x86에서의 태스크(32-비트와 64-비트)
____ARM에서의 프로세스 상태
__스택
__멀티스레딩의 정의
____플린의 분류
____대칭 대 비대칭 멀티프로세싱
____느슨하거나 단단하게 결합된 멀티프로세싱
____멀티프로세싱과 멀티스레딩의 결합
____멀티스레딩 유형
__스케줄러
__예제 애플리케이션 추적
__상호 배제 구현
____하드웨어
____소프트웨어
__요약

3장. C++ 멀티스레딩 API
__API 개요
__POSIX 스레드
____윈도우 지원
____Pthreads 스레드 관리
____뮤텍스
____조건 변수
____동기화
____세마포어
____스레드 로컬 스토리지
__윈도우 스레드
____스레드 관리
____고급 관리
____동기화
____조건 변수
____스레드 로컬 스토리지
__상승
__Qt
____QThread
____스레드 풀
____동기화
____QtConcurrent
____스레드 로컬 스토리지
__POCO
____Thread 클래스
____스레드 풀
____스레드 로컬 스토리지
____동기화
__C++ 스레드
__모두 합치면
__요약

4장. 스레드 동기화와 통신
__안전 제일
__스케줄러
____고수준 관점
____구현
____요청 클래스
____Worker 클래스
__디스패처
____메이크파일
____출력 결과
__공유 데이터
____읽기-쓰기 락의 사용
____공유 포인터의 사용
__요약

5장. 네이티브 C++ 스레드와 기본 요소
__STL 스레딩 API
____Boost.Thread API
__2011 표준
__C++14
__C++17
__STL 구성
__스레드 클래스
____기본 사용
____인자 전달
____반환 값
____레드 이동하기
____스레드 ID
____슬립
____양보(Yield)
____분리(Detach)
____스왑(Swap)
__뮤텍스
____기본 사용
____타임드 뮤텍스
____락 가드
____고유 락
____범위 락
____재귀 뮤텍스
____재귀 타임드 뮤텍스
__공유 뮤텍스
____공유 타임드 뮤텍스
__조건 변수
____Condition_variable_any
____스레드 종료 시점에 모두에게 통지하기
__퓨처
____프라미스
____Packaged_task
____Async
__원자적 요소
__요약

6장. 멀티스레드 코드의 디버깅
__언제 디버깅을 시작해야 하나
__단순한 디버거
____GDB
____멀티스레드 코드의 디버깅
____브레이크포인트
____백 트레이스
__동적 분석 툴
____제약
____대안
____Memcheck
____Helgrind
____pthreads API의 오사용
____락 순서 문제
____데이터 경쟁
____DRD
____기본 사용
____기능
____C++11 스레드 지원
__요약


7장. 모범 실전 사례
__올바른 멀티스레딩
__잘못된 기대-데드락
__부주의-데이터 경쟁
__만능이 아닌 뮤텍스
__훌륭한 뮤텍스인 락
__스레드 대 퓨처
__초기화의 정적 순서
__요약

8장. 원자적 동작 - 하드웨어와 작업하기
__원자적 동작
____비주얼 C++
__GCC
__메모리 순서
____기타 컴파일러
____C++11 원자적 요소
____예제
____비클래스 함수
____예제
____원자적 플래그
____메모리 순서
__요약

9장. 분산 컴퓨팅에서의 멀티스레딩
__분산 컴퓨팅이란
____MPI
____MPI 애플리케이션의 컴파일
____클러스터 하드웨어
__Open MPI 설치하기
____리눅스와 BSD
____윈도우
__노드 간의 작업 분산
____MPI 노드 설정하기
____MPI 호스트 파일 생성하기
____작업 실행하기
____클러스터 스케줄러 사용하기
__MPI 통신
____MPI 데이터 유형
____기본 통신
____고급 통신
____브로드캐스팅
____분산과 수집
__MPI 대 스레드
__잠재적 문제
__요약

10장. GPGPU에서의 멀티스레딩
__GPGPU 처리 모델
____구현
____OpenCL
____일반적인 OpenCL 애플리케이션
____OpenCL 버전
__개발 환경 설정
____리눅스
____윈도우
____OS X/MacOS
__기본 OpenCL 애플리케이션
__GPU 메모리 관리
__GPGPU와 멀티스레딩
____지연 시간
__잠재적 문제
__GPGPU 애플리케이션의 디버깅
__요약

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.