C# 멀티스레드 프로그래밍 [멀티코어를 위한 스레드, TPL, PLINQ, Rx 활용]
- 원서명Multithreading in C# 5.0 Cookbook (ISBN 9781849697644)
- 지은이유진 아가포노프(Eugene Agafonov)
- 옮긴이이문호
- ISBN : 9788960778382
- 30,000원
- 2016년 04월 14일 펴냄 (절판)
- 페이퍼백 | 312쪽 | 188*235mm
- 시리즈 : acorn+PACKT
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
요약
이 책은 C#으로 애플리케이션의 성능을 효율적으로 올릴 수 있는 멀티스레딩과 병렬 프로그래밍 기법을 중심으로 다루었다. 스레드의 기본 개념부터 시작해 TPL, PLINQ, Rx 등 고급 주제까지 예제 코드로 풀어 설명했으며, 개발 과정에서 필요한 내용과 코드를 용도에 맞게 찾아볼 수 있도록 구성한 책이다.
이 책에서 다루는 내용
기초 스레드 작업, 스레드 동기화, 스레드 작업 조정
태스크 병렬 라이브러리로 자신만의 비동기 API 개발
C#의 비동기 언어 기능 활용
I/O 스레드로 서버 애플리케이션을 확장하는 방법
PLINQ와 LINQ 질의 병렬화
윈도우 8 비동기 API 활용
비동기 연산 실행과 옵션 관리를 위한 반응형 확장 사용
이 책의 대상 독자
이 책은 멀티스레딩, 비동기와 병렬 프로그래밍에 대한 배경지식이 부족하거나 아예 없는 기존 C# 개발자를 대상으로 하며, 기본 개념부터 시작해서 복잡한 프로그래밍 패턴, C#과 닷넷 에코 시스템을 이용한 알고리즘에 관련된 주제를 다룬다.
이 책의 구성
1장, '스레드 기초'에서는 C#에서 스레드를 이용한 기본 연산을 소개한다. 스레드의 개념과 스레드 사용의 장단점, 이외에 중요한 스레드의 다른 측면을 설명한다.
2장, '스레드 동기화'에서는 스레드 상호작용의 세부사항을 설명한다. 스레드를 함께 조정해야 하는 이유와 스레드 조정을 구성하는 다른 방식을 배운다.
3장, '스레드 풀 사용'에서는 스레드 풀 개념을 설명한다. 스레드 풀을 사용하는 방법, 비동기 연산으로 작업하는 방법, 스레드 풀 사용에 따른 좋고 나쁜 사례를 보여준다.
4장, '태스크 병렬 라이브러리 사용'에서는 태스크 병렬 라이브러리 프레임워크에 깊이 빠져본다. 태스크 조합, 예외 관리, 연산 취소를 포함한 TPL의 모든 중요한 측면을 개략적으로 설명한다.
5장, '네이티브 비동기 프로그래밍'에서는 C#의 새로운 특징인 비동기 메소드를 자세히 설명한다. async와 await 키워드의 의미와 다른 시나리오에서 사용하는 방법, 내부에서 await가 동작하는 방법 등을 알 수 있다.
6장, '동시성 컬렉션 사용'에서는 닷넷 프레임워크에 포함된 병렬 알고리즘을 위한 표준 데이터 구조를 설명한다. 각 데이터 구조에 대한 간단한 프로그래밍 시나리오를 살펴본다.
7장, 'PLINQ 사용'에서는 병렬 LINQ 인프라스트럭처에 깊이 빠져본다. 태스크와 데이터 병렬화, LINQ 질의 병렬화, 병렬화 옵션 미세조정, 질의 분할과 병렬 질의 결과 취합에 대해 설명한다.
8장, '반응형 확장'에서는 반응형 확장 프레임워크를 언제 어떻게 사용하는지 설명한다. 이벤트를 조합하는 방법, 이벤트 순서에 대한 LINQ 질의를 수행하는 방법을 배운다.
9장, '비동기 I/O 사용'에서는 파일, 네트워크, 데이터베이스 시나리오를 포함한 비동기 I/O 프로세스를 자세히 다룬다.
10장, '병렬 프로그래밍 패턴'에서는 일반적인 병렬 프로그래밍 문제 해결에 대해 개략적으로 설명한다.
11장, '윈도우 8 애플리케이션 프로그래밍'에서는 윈도우 8용 비동기 애플리케이션 프로그래밍의 개념을 다룬다. 윈도우 8 비동기 API로 작업하는 방법과 윈도우 스토어 애플리케이션에서 백그라운드 작업을 수행하는 방법을 배운다.
목차
목차
- 1장 스레드 기초
- 소개
- C#으로 스레드 생성
- 스레드 일시 정지
- 스레드 대기
- 스레드 중단
- 스레드 상태 조사
- 스레드 우선순위
- 포그라운드 스레드와 백그라운드 스레드
- 스레드에 파라미터 전달
- C#의 lock 키워드로 잠그기
- Monitor 생성자로 잠그기
- 예외 처리
- 2장 스레드 동기화
- 소개
- 기본 원자 연산 수행
- Mutex 생성자 사용
- SemaphoreSlim 생성자 사용
- AutoResetEvent 생성자 사용
- ManualResetEventSlim 생성자 사용
- CountdownEvent 생성자 사용
- Barrier 생성자 사용
- ReaderWriterLockSlim 생성자 사용
- SpinWait 생성자 사용
- 3장 스레드 풀 사용
- 소개
- 스레드 풀에서 대리자 호출
- 스레드 풀에 비동기 연산 넣기
- 스레드 풀과 병렬도
- 취소 옵션 구현
- 스레드 풀을 이용한 대기 처리와 타임아웃 사용
- 타이머 사용
- BackgroundWorker 컴포넌트 사용
- 4장 태스크 병렬 라이브러리 사용
- 소개
- 태스크 생성
- 태스크로 기본적인 연산 수행
- 태스크를 함께 조합
- APM 패턴을 태스크로 변환
- EAP 패턴을 태스크로 변환
- 취소 옵션 구현
- 태스크에서 예외 처리
- 태스크를 병렬로 실행
- TaskScheduler로 태스크 실행을 미세조정
- 5장 네이티브 비동기 프로그래밍
- 소개
- 비동기 태스크 결과를 얻는 await 연산자 사용
- 람다 표현식에서 await 연산자 사용
- 연속 비동기 태스크에 await 연산자 사용
- 병렬 비동기 태스크 실행을 위한 await 연산자 사용
- 비동기 연산에서 예외 처리
- 잡아낸 동기화 컨텍스트를 사용해 회피
- async void 메소드 회피
- 사용자 정의 대기 가능 타입 설계
- await로 dynamic 타입 사용
- 6장 동시성 컬렉션 사용
- 소개
- ConcurrentDictionary 사용
- ConcurrentQueue를 이용한 비동기 처리 구현
- ConcurrentStack으로 비동기 처리 순서 변경
- ConcurrentBag을 이용해 확장 가능한 크롤러 생성
- BlockingCollection을 이용한 비동기 처리 일반화
- 7장 PLINQ 사용
- 소개
- Parallel 클래스 사용
- LINQ 질의 병렬화
- PLINQ 질의의 파라미터 미세조정
- PLINQ 질의에서 예외 처리
- PLINQ 질의에서 데이터 분할 관리
- PLINQ 질의에 대한 사용자 정의 집계기 생성
- 8장 반응형 확장
- 소개
- 컬렉션을 비동기 관찰 가능한 컬렉션으로 변환
- 사용자 정의 관찰 가능한 컬렉션 순서 작성
- Subject 타입 계열 사용
- Observable 객체 생성
- 관찰 가능한 컬렉션에 대한 LINQ 사용
- Rx를 이용한 비동기 연산 생성
- 9장 비동기 I/O 사용
- 소개
- 비동기적으로 파일 처리
- 비동기 HTTP 서버와 클라이언트 작성
- 비동기적으로 데이터베이스 작업
- 준비
- WCF 서비스를 비동기적으로 호출
- 10장 병렬 프로그래밍 패턴
- 소개
- 지연 평가된 공유 상태 구현
- BlockingCollection으로 병렬 파이프라인 구현
- TPL 데이터플로우로 병렬 파이프라인 구현
- PLINQ로 맵/리듀스 구현
- 11장 윈도우 8 애플리케이션 프로그래밍
- 소개
- 윈도우 스토어 애플리케이션에서 타이머 사용
- 일반 애플리케이션에서 WinRT API 사용
- 윈도우 스토어 애플리케이션에서 BackgroundTask 사용
도서 오류 신고
정오표
정오표
[p80. 예제 구현 3번 문제 2행]
Callback(IAsyncResultar)
->
Callback(IAsyncResult ar)
[p80. 예제 구현 3번 문제 11행]
Test(out intthreadId)
->
Test(out int threadId)
[p.160 : 아래서 8행]
{0}. Is thread pool thread: {1}", name,
->
{0}. Is thread pool thread: {1}",
[p.161 : 아래서 6행]
bool 타입의 IsComppeted 속성과
->
bool 타입의 IsCompleted 속성,
[p.207 : 1행]