C# 동시성 프로그래밍 2/e [실제 애플리케이션에 적용하는 효율적인 비동기, 병렬, 멀티스레드 프로그래밍]
- 원서명Concurrency in C# Cookbook: Asynchronous, Parallel, and Multithreaded Programming, 2nd Edition (ISBN 9781492054504)
- 지은이스티븐 클리어리(Stephen Cleary)
- 옮긴이김홍중
- ISBN : 9791161755274
- 30,000원
- 2021년 05월 18일 펴냄
- 페이퍼백 | 340쪽 | 188*235mm
- 시리즈 : 프로그래밍 언어
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/concurrency-c-cookbook
요약
비동기, 병렬 처리, 데이터 흐름, 멀티스레딩 등 최신 닷넷 프레임워크와 C# 언어가 제공하는 동시성 기술과 함께 리액티브 프로그래밍, 동시성 기술의 상호운용, 동시 컬렉션, 테스트, 취소 기능, 동기화처럼 동시성과 관련이 있는 다양한 주제를 폭넓게 다룬다. 모든 주제를 간결하고 명확하게 설명하는 동시에 이해를 돕는 간단하고 효과적인 예제를 곁들여 동시성을 처음 접하거나 동시성에 익숙하지 않은 개발자를 동시성의 세계로 이끌어주는 훌륭한 안내서다.
추천의 글
“스티븐 클리어리는 C#의 비동기성과 병렬성의 핵심 전문가로 자리매김해 왔다. 이 책은 이런 기술을 처음 접하거나 이런 기술로 성공을 거두고 싶은 개발자가 잘 알아야 할 핵심과 원칙을 명확하고 간결하게 전달한다.”
— 스티븐 토웁(Stephen Toub), 마이크로소프트 수석 아키텍트
이 책에서 다루는 내용
■ async와 await를 활용하는 비동기 작업
■ 비동기 스트림으로 코드 개선
■ 닷넷의 병렬 작업 라이브러리와 함께 병렬 처리 프로그래밍
■ 닷넷의 TPL 데이터 흐름 라이브러리로 데이터 흐름 파이프라인 생성
■ LINQ를 기반으로 구축한 System.Reactive의 기능
■ 스레드로부터 안전한 컬렉션과 불변 컬렉션 활용
■ 동시성 코드의 단위 테스트
■ 스레드 풀 활용
■ 깔끔하고 협조적인 취소
■ 동시성 기술의 결합이 필요한 상황
■ 비동기 친화적 OOP 프로그래밍
■ 예전 비동기 방식을 사용하는 코드를 인식하는 방법과 최신 코드로 변환하는 방법
이 책의 대상 독자
최신 동시성 기법을 배우려는 개발자를 대상으로 하며, 독자가 제네릭 컬렉션(generic collection), 열거자, LINQ를 이해할 정도의 닷넷(.NET) 경험이 있다고 가정한다. 멀티스레딩 또는 비동기 프로그래밍에 관한 지식은 전혀 필요하지 않다. 하지만 이런 분야에 지식이 있더라도 여전히 유용할 수 있다. 더 안전하고 사용하기 쉬운 최신 라이브러리를 소개하는 책이기 때문이다.
동시성은 모든 애플리케이션에서 유용하다. 데스크톱, 모바일, 서버 애플리케이션에 상관없이 이제 동시성은 사실상 전반적인 요구 사항이다. 이 책의 내용을 활용하면 더 빨리 반응하는 사용자 인터페이스, 규모 변경이 더 쉬운 서버를 만들 수 있다. 이미 동시성은 어디에나 존재하는 지경에 이르렀고, 이제 동시성 기법의 이해와 활용은 전문 개발자의 필수 지식이다.
이 책의 구성
1장은 병렬, 비동기, 리액티브, 데이터 흐름 등 이 책에서 다룰 다양한 종류의 동시성을 소개한다.
2장에서 6장은 1장에서 소개한 동시성을 하나하나 철저하게 설명한다.
이후 7장부터 14장은 각각 동시성의 특정 측면을 다루며 일반적인 동시성 문제의 해결책에 관한 참고 자료 역할을 한다.
이미 동시성에 익숙하더라도 1장은 읽거나 최소한 훑어보기를 권한다.
이 책은 최신 동시성 기법만을 다루며, 최신 방식을 사용해서 동시성을 소개한다. 병렬, 비동기, 리액티브 프로그래밍 등 다양한 종류의 동시성을 다루지만, 다른 책과 온라인 자료에서 충분히 다루고 있는 전통적인 기법은 다루지 않는다.
목차
목차
- 1장. 동시성 개요
- 비동기 프로그래밍
- 병렬 프로그래밍
- 리액티브 프로그래밍
- 데이터 흐름
- 멀티스레드 프로그래밍
- 동시성 애플리케이션용 컬렉션
- 최신 설계 방식
- 핵심 기술 정리
- 2장. 비동기의 기초
- 2.1 일정 시간 동안 일시 정지
- 2.2 완료한 작업 반환
- 2.3 진행 상황 보고
- 2.4 모든 작업의 완료를 대기
- 2.5 여러 작업 중 하나의 완료를 대기
- 2.6 작업이 완료할 때마다 처리
- 2.7 연속 작업용 콘텍스트 회피
- 2.8 async Task 메서드의 예외 처리
- 2.9 async void 메서드의 예외 처리
- 2.10 ValueTask 생성
- 2.11 ValueTask 사용
- 3장. 비동기 스트림
- 비동기 스트림과 Task<T>
- 비동기 스트림과 IEnumerable<T>
- 비동기 스트림과 Task<IEnumerable<T>>
- 비동기 스트림과 IObservable<T>
- 정리
- 3.1 비동기 스트림 생성
- 3.2 비동기 스트림 사용
- 3.3 비동기 스트림과 LINQ를 함께 사용
- 3.4 비동기 스트림의 취소
- 참고
- 4장. 병렬 처리의 기초
- 4.1 데이터의 병렬 처리
- 4.2 병렬 집계
- 4.3 병렬 호출
- 4.4 동적 병렬 처리
- 4.5 PLINQ
- 5장. 데이터 흐름의 기초
- 5.1 블록 연결
- 5.2 오류 전파
- 5.3 블록의 연결 해제
- 5.4 블록의 흐름 조절
- 5.5 데이터 흐름 블록으로 병렬 처리
- 5.6 사용자 지정 데이터 흐름 블록 생성
- 6장. SystemReactive의 기초
- 6.1 닷넷 이벤트 변환
- 6.2 콘텍스트로 알림 전달
- 6.3 Window와 Buffer로 이벤트 데이터 그룹화
- 6.4 Throttle과 Sample로 이벤트 스트림 조절
- 6.5 타임아웃
- 7장. 테스트
- 7.1 async 메서드의 단위 테스트
- 7.2 async 메서드의 실패 사례를 단위 테스트
- 7.3 async void 메서드의 단위 테스트
- 7.4 데이터 흐름 메시의 단위 테스트
- 7.5 System
- 7.6 시간과 관련이 있는 System
- 8장. 상호운용
- 8.1 ‘Async’ 메서드와 ‘Completed’ 이벤트용 비동기 래퍼
- 8.2 ‘Begin’과 ‘End’ 메서드용 비동기 래퍼
- 8.3 범용 비동기 래퍼
- 8.4 병렬 처리 코드용 래퍼
- 8.5 System
- 8.6 async 코드용 System
- 8.7 비동기 스트림과 데이터 흐름 메시
- 8.8 System
- 8.9 System
- 9장. 컬렉션
- 9.1 불변 스택과 불변 큐
- 9.2 불변 리스트
- 9.3 불변 집합
- 9.4 불변 딕셔너리
- 9.5 스레드로부터 안전한 딕셔너리
- 9.6 블로킹 큐
- 9.7 블로킹 스택과 블로킹 백
- 9.8 비동기 큐
- 9.9 큐 조절
- 9.10 큐 샘플링
- 9.11 비동기 스택과 비동기 백
- 9.12 블로킹 큐와 비동기 큐
- 10장. 취소
- 10. 1 취소 요청 실행
- 10.2 폴링으로 취소 요청에 대응
- 10.3 타임아웃으로 취소
- 10.4 비동기 코드의 취소
- 10.5 병렬 코드의 취소
- 10.6 System
- 10.7 데이터 흐름 메시의 취소
- 10.8 취소 토큰 소스의 연결
- 10.9 다른 취소 방식과 상호운용
- 11장. 함수형 친화적 OOP
- 11.1 비동기 인터페이스와 상속
- 11.2 비동기 생성: 팩토리
- 11.3 비동기 생성: 비동기 초기화 패턴
- 11.4 비동기 속성
- 11.5 비동기 이벤트
- 11.6 비동기 삭제
- 12장. 동기화
- 12.1 블로킹 잠금
- 12.2 비동기 잠금
- 12.3 블로킹 신호
- 12.4 비동기 신호
- 12.5 조절
- 13장. 스케줄링
- 13.1 스레드 풀에 작업 스케줄링
- 13.2 작업 스케줄러를 사용해서 코드 실행
- 13.3 병렬 코드의 스케줄링
- 13.4 스케줄러로 데이터 흐름 동기화
- 14장. 다양한 동시성 상황
- 14.1 공유 리소스 초기화
- 14.2 System
- 14.3 비동기 데이터 바인딩
- 14.4 암시적 상태
- 14.5 동기 코드와 비동기 코드를 한 번에 구현
- 14.6 데이터 흐름 메시를 사용한 철도 지향 프로그래밍
- 14.7 진행률 업데이트의 조절
- 부록 A. 예전 플랫폼 지원
- 부록 B. 비동기 패턴의 인식과 해석