C++ 멀티스레딩 정복하기 (견고하면서도 병렬성과 병행성을 가지는 애플리케이션 작성법)

C++ 멀티스레딩 정복하기 (견고하면서도 병렬성과 병행성을 가지는 애플리케이션 작성법)

$25.78
Description
멀티스레드와 병행성에 대한 깊이 있는 논의와 그 구현 방법을 다루고, 원자적 동작의 본질을 이해하고 코드 최적화에 유용하게 사용할 수 있는 방법을 배운다. 분산 컴퓨팅 환경에서 멀티스레드 애플리케이션을 구현하고 멀티스레딩을 채택한 C++ 기반의 GPGPU 애플리케이션 설계 방법을 익힌다.
저자

마야포쉬

소프트웨어공학자로이업계와전자,로봇,AI분야에심취해있다.절친트레버퍼디(TrevorPurdy)와함께소프트웨어개발회사니얀코(Nyanko)를운영하며다양한게임개발프로젝트업무를진행중이다.이외에도전세계기업을대상으로다양한프리랜서업무를진행한다.
소프트웨어작성외에도방정식을풀고소설집필을즐긴다.닌텐도의명작<젤다의전설:시간의오카리나>를기반으로한이야기를쓰고,최근에는생존공포소설『ViralDesire』을쓰기시작했다.디지털도서관웹사이트스크리브드(Scribd)프로필을보면전체저작목록을볼수있다.
생화학과로봇,인체해부에도관심이있다.더알고싶다면블로그(https://jinzouningen.wordpress.com)를방문하자.순수한야망으로가득차있는듯하다.

목차

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

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


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

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

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

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

출판사 서평

★이책에서다루는내용★
■다양한운영체제가현재멀티스레딩을구현하는방식
■새로운애플리케이션의설계시최적의멀티스레딩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애플리케이션설계방법은최근비트코인채굴과관련해그래픽카드의품귀현상과도그궤를같이한다는점에서주목할만하다.
이책은그분량에비해다루는내용의심도와주제가상당히광범위하며때론포괄적이고도때론매우정교하다.개발자여러분,이제준비가되었다면안전띠를단단히조이고멋진질주를시작해보자!