Concurrent Programming on Windows 한국어판 [멀티코어, 멀티프로세서를 활용하는 윈도우 병렬 프로그래밍]
- 원서명Concurrent Programming on Windows (ISBN 9780321434821)
- 지은이조 더피
- 옮긴이황진호
- ISBN : 9788960772885
- 50,000원
- 2012년 03월 30일 펴냄 (절판)
- 페이퍼백 | 1,052쪽 | 188*250mm
- 시리즈 : 윈도우 시스템 프로그래밍
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
동시성∙병렬성은 결국 모든 소프트웨어 개발자에게 중요한 부분이며, 운영체제에서 시작해 라이브러리를 거쳐 애플리케이션 자체까지 영향이 미친다. 이 책에서는 동시성에 대한 이해를 돕기 위해 동시성의 개념을 소개하고, 플랫폼 특징, 내부 동작, API에 관해 상세하게 기술한다. 그리고 동시성 소프트웨어를 작성하는 병렬 프로그래밍 시에 나타나는 공통 패턴과 최적의 실행, 알고리즘, 데이터 구조를 설명하고, 이런 내용을 바탕으로 전체 시스템 구조와 자주 발생하는 프로세스에서 중요한 내용을 다룬다.
[ 소개 ]
저자 조 더피는 동시성과 하드웨어 병렬성의 최적 이득을 얻을 수 있는 소프트웨어 작성 방법을 설명하는 큰 일을 해냈다. 이 책에서 저자는 주로 윈도우의 C#과 C++를 사용해 대규모의 병렬 프로그램을 설계하고, 구현하고, 유지하는 방법을 설명한다.
이 책에서는 애플리케이션과 시스템, 라이브러리 개발자에게 멀티코어 프로세서를 위한 효율적이고 안전한 코드를 작성하는 데 필요한 도구와 기술을 전달하는 것을 목표로 한다. 이와 같은 내용은 동시성이 내재되고 사용하기 쉬운 서버 애플리케이션과 계산 위주의 이미지 조작, 금융 분석, 시뮬레이션, AI 알고리즘 등의 문제뿐만 아니라, 더 많은 노력을 바탕으로 동시성을 사용해 속도를 향상시킬 수 있는 수학 라이브러리와 정렬 루틴, 보고서 생성, XML 조작, 스트림 프로세싱 알고리즘 등의 문제에도 중요하다
이 책은 4개의 주요 부분으로 구성했다. 첫 번째로 높은 수준에서 동시성을 설명하고, 다음은 근본적인 플랫폼 특징과 내부 작업에 집중한다. 다음으로 동시성 소프트웨어를 작성할 때 발생하는 공통적인 패턴과 최적의 실습, 알고리즘, 데이터 구조를 설명한다. 마지막으로 동시성 프로그래밍의 일반적인 시스템 아키텍처와 프로세스 관련 내용을 다룬다.
[ 이 책의 구성 ]
이 책은 네 부분으로 구성했다. 1부 ‘개념’은 어느 하나의 주제를 깊게 파고들지 않고 높은 수준의 동시성을 소개한다. 2부 ‘메커니즘’은 플랫폼 특징, 내부 동작, API 상세 설명에 관해 바로 초점을 맞췄다. 3부 ’테크닉’은 동시성 소프트웨어를 작성할 때 나타나는 공통 패턴과 최적의 실행, 알고리즘, 데이터 구조를 설명한다. 4부 ‘시스템’은 전체 시스템 구조와 자주 발생하는 프로세스에서 중요한 내용을 다룬다. 여기서는 연속성이 있다. ‘개념’은 일반적인 동시성을 기본적으로 이해하게 돕기 때문에 첫 번째다. ‘테크닉’을 이해하는 것은 ‘메커니즘’에 대한 확실한 이해가 없으면 어려울 것이며, 비슷하게 실제 ‘시스템’을 만드는 것은 나머지를 이해하지 않고서는 불가능하다. 마지막에 두 장의 부록도 있다.
[ 추천의 글 ]
컴퓨터 산업은 다시 한 번 교차로에 서있다. 늘어나는 소프트웨어의 복잡성과 함께 새로운 멀티코어 프로세서 형태의 하드웨어 동시성으로 인해 기술 산업 분야에서는 현대 컴퓨터의 아키텍처와 그에 따른 소프트웨어 개발 패러다임을 모두 재고해봐야 할 것이다.
지난 수십 년간 컴퓨터는 기본적인 계산 모델의 근본적인 변화 없이 기하급수적인 성능과 용량 증가와 함께 별다른 문제없이 발전해왔다. 하드웨어는 무어의 법칙(Moore's Law)을 따랐으며, 클록 속도는 증가했고, 소프트웨어는 끊임없는 향상된 성능을 이용해 작성됐으며, 하드웨어 향상 속도보다도 앞서갔다. 하드웨어와 소프트웨어의 공생 관계는 최근까지 조금도 수그러들지 않고 이어졌다. 무어의 법칙은 여전히 영향력을 미치는 데 반해, 클록 속도도 상응해 증가할 것이라는 예측은 사라졌다.
하드웨어의 방향성에 있어 이런 변화의 이유는 버클리에 있는 캘리포니아 대학의 데이비드 패터슨(David Patterson)에 의해 표현된 간단한 수식으로 요약될 수 있다.
파워 장벽 + 메모리 장벽 + ILP 장벽 = 연쇄적인 성능의 큰 장벽
CPU 파워는 클록 속도에 실질적으로 영향을 미치는 클록 주파수에 비례해 증가한다. 열을 소멸시키는 능력은 실질적으로 물리적인 한계에 도달했다. 그 결과 굉장한 (그리고 고가의) 냉각 기술(또는 물질 기술의 돌파구)이 없다면 클록 속도의 증가는 불가능하다. 이것이 수식에서 ‘파워 장벽’ 부분이다. 메모리 성능 개선 속도는 프로세서 성능의 발전 속도를 따라잡지 못한다. 따라서 메인 메모리에 접근이 요구되는 CPU 사이클의 수는 계속해서 증가하게 할 것이다. 이것이 ‘메모리 장벽’이다. 마지막으로 하드웨어 엔지니어는 현재 명령어의 결과를 알기 전에 미리 짐작해 명령어를 실행하게 함으로써 연속적인 소프트웨어 성능을 증가시켰다. 이것은 명령어 레벨 병렬성(ILP, Instruction Level Parallelism)이라고 한다. ILP의 성능 향상은 짐작하기 어렵고, 복잡성은 전력 소비를 증가시킨다. 결과적으로 ILP의 개선은 멈춘 상태이며, 이를 일러 ‘ILP 장벽’이라고 한다.
결국 우리는 변곡점에 도달했다. 소프트웨어 생태계는 멀티코어 시스템을 더 잘 지원하도록 발전해야만 하고, 이런 진화는 시간이 걸릴 것이다. 급속히 발전하는 컴퓨터 성능에서 혜택을 보고, ‘새로운 하드웨어에서 한 번 작성하고 더 빨리 실행된다’는 패러다임을 유지하려면 프로그래밍 커뮤니티는 동시성 애플리케이션 설계 방법을 배워야만 한다. 동시성을 더 방대하게 수용한다면 비동기성과 느슨한 결합을 통한 소프트웨어 + 서비스의 결합이나, 클라이언트 측의 병렬성, 서버 측의 클라우드 컴퓨팅 등이 가능해지는 시대가 열린다.
윈도우와 닷넷 프레임워크 플랫폼은 동시성을 풍부하게 지원한다. 이는 윈도우 NT에서 멀티프로세서를 지원한 이후로 10년이 넘는 기간 동안 이어졌다. 스레드 스케줄링 성능과 동기화 API, 메모리 구조 인식(특히 윈도우 비스타에 추가된 것)의 지속적인 성능 개선을 통해 윈도우는 하드웨어 동시성의 사용을 극대화하는 운영체제로 발전해왔다. 이 책은 이와 같은 영역을 모두 다룬다. 애플리케이션에 멀티스레드를 도입하기 시작할 때, 깔끔한 아키텍처와 설계는 소프트웨어의 복잡성을 줄이고 유지 보수를 개선하는 데 대단히 중요하다. 이 책에서는 플랫폼의 성능뿐만 아니라 최근에 만들어진 최고의 예제에도 역점을 둔다. 조는 이 책을 통해 메커니즘과 더불어 최고의 예제를 소개하는 대단한 일을 했다.
멀티코어는 이미 만든 애플리케이션에 개선된 성능을 제공한다. 그러나 컴퓨터가 사람들을 위해 무엇을 할 수 있어야만 하는가에 대해 완전히 다르게 생각할 기회도 준다. 컴퓨터 성능의 지속적인 성장은 사람들에게 더욱 흥미롭고 도움이 될 수 있는 애플리케이션을 질적으로 바꿔 놓을 것이며, 이전에는 전혀 불가능했던 새로운 일도 할 수 있을 것이다. 이와 같은 진화를 바탕으로 소프트웨어는 사람이 컴퓨터와 더욱 개인적이고 인간적으로 상호 작용할 수 있는 방법을 열어 줄 것이다. 그러므로 이 책을 즐기기 바란다. 이 책은 윈도우 플랫폼에서 동시성과 멀티코어를 인식하는 소프트웨어를 작성하는 데 첫발을 내딛도록 안내할 것이다.
- 2008년 6월
크레이그 먼디(Craig Mundie) /마이크로소프트 연구∙전략 최고 책임자
[ 소개 ]
저자 조 더피는 동시성과 하드웨어 병렬성의 최적 이득을 얻을 수 있는 소프트웨어 작성 방법을 설명하는 큰 일을 해냈다. 이 책에서 저자는 주로 윈도우의 C#과 C++를 사용해 대규모의 병렬 프로그램을 설계하고, 구현하고, 유지하는 방법을 설명한다.
이 책에서는 애플리케이션과 시스템, 라이브러리 개발자에게 멀티코어 프로세서를 위한 효율적이고 안전한 코드를 작성하는 데 필요한 도구와 기술을 전달하는 것을 목표로 한다. 이와 같은 내용은 동시성이 내재되고 사용하기 쉬운 서버 애플리케이션과 계산 위주의 이미지 조작, 금융 분석, 시뮬레이션, AI 알고리즘 등의 문제뿐만 아니라, 더 많은 노력을 바탕으로 동시성을 사용해 속도를 향상시킬 수 있는 수학 라이브러리와 정렬 루틴, 보고서 생성, XML 조작, 스트림 프로세싱 알고리즘 등의 문제에도 중요하다
이 책은 4개의 주요 부분으로 구성했다. 첫 번째로 높은 수준에서 동시성을 설명하고, 다음은 근본적인 플랫폼 특징과 내부 작업에 집중한다. 다음으로 동시성 소프트웨어를 작성할 때 발생하는 공통적인 패턴과 최적의 실습, 알고리즘, 데이터 구조를 설명한다. 마지막으로 동시성 프로그래밍의 일반적인 시스템 아키텍처와 프로세스 관련 내용을 다룬다.
[ 이 책의 구성 ]
이 책은 네 부분으로 구성했다. 1부 ‘개념’은 어느 하나의 주제를 깊게 파고들지 않고 높은 수준의 동시성을 소개한다. 2부 ‘메커니즘’은 플랫폼 특징, 내부 동작, API 상세 설명에 관해 바로 초점을 맞췄다. 3부 ’테크닉’은 동시성 소프트웨어를 작성할 때 나타나는 공통 패턴과 최적의 실행, 알고리즘, 데이터 구조를 설명한다. 4부 ‘시스템’은 전체 시스템 구조와 자주 발생하는 프로세스에서 중요한 내용을 다룬다. 여기서는 연속성이 있다. ‘개념’은 일반적인 동시성을 기본적으로 이해하게 돕기 때문에 첫 번째다. ‘테크닉’을 이해하는 것은 ‘메커니즘’에 대한 확실한 이해가 없으면 어려울 것이며, 비슷하게 실제 ‘시스템’을 만드는 것은 나머지를 이해하지 않고서는 불가능하다. 마지막에 두 장의 부록도 있다.
[ 추천의 글 ]
컴퓨터 산업은 다시 한 번 교차로에 서있다. 늘어나는 소프트웨어의 복잡성과 함께 새로운 멀티코어 프로세서 형태의 하드웨어 동시성으로 인해 기술 산업 분야에서는 현대 컴퓨터의 아키텍처와 그에 따른 소프트웨어 개발 패러다임을 모두 재고해봐야 할 것이다.
지난 수십 년간 컴퓨터는 기본적인 계산 모델의 근본적인 변화 없이 기하급수적인 성능과 용량 증가와 함께 별다른 문제없이 발전해왔다. 하드웨어는 무어의 법칙(Moore's Law)을 따랐으며, 클록 속도는 증가했고, 소프트웨어는 끊임없는 향상된 성능을 이용해 작성됐으며, 하드웨어 향상 속도보다도 앞서갔다. 하드웨어와 소프트웨어의 공생 관계는 최근까지 조금도 수그러들지 않고 이어졌다. 무어의 법칙은 여전히 영향력을 미치는 데 반해, 클록 속도도 상응해 증가할 것이라는 예측은 사라졌다.
하드웨어의 방향성에 있어 이런 변화의 이유는 버클리에 있는 캘리포니아 대학의 데이비드 패터슨(David Patterson)에 의해 표현된 간단한 수식으로 요약될 수 있다.
파워 장벽 + 메모리 장벽 + ILP 장벽 = 연쇄적인 성능의 큰 장벽
CPU 파워는 클록 속도에 실질적으로 영향을 미치는 클록 주파수에 비례해 증가한다. 열을 소멸시키는 능력은 실질적으로 물리적인 한계에 도달했다. 그 결과 굉장한 (그리고 고가의) 냉각 기술(또는 물질 기술의 돌파구)이 없다면 클록 속도의 증가는 불가능하다. 이것이 수식에서 ‘파워 장벽’ 부분이다. 메모리 성능 개선 속도는 프로세서 성능의 발전 속도를 따라잡지 못한다. 따라서 메인 메모리에 접근이 요구되는 CPU 사이클의 수는 계속해서 증가하게 할 것이다. 이것이 ‘메모리 장벽’이다. 마지막으로 하드웨어 엔지니어는 현재 명령어의 결과를 알기 전에 미리 짐작해 명령어를 실행하게 함으로써 연속적인 소프트웨어 성능을 증가시켰다. 이것은 명령어 레벨 병렬성(ILP, Instruction Level Parallelism)이라고 한다. ILP의 성능 향상은 짐작하기 어렵고, 복잡성은 전력 소비를 증가시킨다. 결과적으로 ILP의 개선은 멈춘 상태이며, 이를 일러 ‘ILP 장벽’이라고 한다.
결국 우리는 변곡점에 도달했다. 소프트웨어 생태계는 멀티코어 시스템을 더 잘 지원하도록 발전해야만 하고, 이런 진화는 시간이 걸릴 것이다. 급속히 발전하는 컴퓨터 성능에서 혜택을 보고, ‘새로운 하드웨어에서 한 번 작성하고 더 빨리 실행된다’는 패러다임을 유지하려면 프로그래밍 커뮤니티는 동시성 애플리케이션 설계 방법을 배워야만 한다. 동시성을 더 방대하게 수용한다면 비동기성과 느슨한 결합을 통한 소프트웨어 + 서비스의 결합이나, 클라이언트 측의 병렬성, 서버 측의 클라우드 컴퓨팅 등이 가능해지는 시대가 열린다.
윈도우와 닷넷 프레임워크 플랫폼은 동시성을 풍부하게 지원한다. 이는 윈도우 NT에서 멀티프로세서를 지원한 이후로 10년이 넘는 기간 동안 이어졌다. 스레드 스케줄링 성능과 동기화 API, 메모리 구조 인식(특히 윈도우 비스타에 추가된 것)의 지속적인 성능 개선을 통해 윈도우는 하드웨어 동시성의 사용을 극대화하는 운영체제로 발전해왔다. 이 책은 이와 같은 영역을 모두 다룬다. 애플리케이션에 멀티스레드를 도입하기 시작할 때, 깔끔한 아키텍처와 설계는 소프트웨어의 복잡성을 줄이고 유지 보수를 개선하는 데 대단히 중요하다. 이 책에서는 플랫폼의 성능뿐만 아니라 최근에 만들어진 최고의 예제에도 역점을 둔다. 조는 이 책을 통해 메커니즘과 더불어 최고의 예제를 소개하는 대단한 일을 했다.
멀티코어는 이미 만든 애플리케이션에 개선된 성능을 제공한다. 그러나 컴퓨터가 사람들을 위해 무엇을 할 수 있어야만 하는가에 대해 완전히 다르게 생각할 기회도 준다. 컴퓨터 성능의 지속적인 성장은 사람들에게 더욱 흥미롭고 도움이 될 수 있는 애플리케이션을 질적으로 바꿔 놓을 것이며, 이전에는 전혀 불가능했던 새로운 일도 할 수 있을 것이다. 이와 같은 진화를 바탕으로 소프트웨어는 사람이 컴퓨터와 더욱 개인적이고 인간적으로 상호 작용할 수 있는 방법을 열어 줄 것이다. 그러므로 이 책을 즐기기 바란다. 이 책은 윈도우 플랫폼에서 동시성과 멀티코어를 인식하는 소프트웨어를 작성하는 데 첫발을 내딛도록 안내할 것이다.
- 2008년 6월
크레이그 먼디(Craig Mundie) /마이크로소프트 연구∙전략 최고 책임자
목차
목차
- 1부 개념
- 1장 개요
- 동시성을 사용해야 하는 이유
- 프로그램 구조와 동시성
- 병렬화 계층
- 동시성을 사용하면 안 되는 경우
- 정리
- 참고 문헌
- 2장 동기화와 시간
- 프로그램 상태 관리
- 공유 상태/비공개 상태 식별
- 상태 기계와 시간
- 격리성
- 불변성
- 동기화: 종류와 기법
- 데이터 동기화
- 조정과 제어 동기화
- 정리
- 참고 문헌
- 프로그램 상태 관리
- 2부 메커니즘
- 3장 스레드
- 스레드의 세부 사항
- 윈도우 스레드란?
- CLR 스레드란?
- 명시적 스레딩과 대안
- 스레드의 탄생과 죽음
- 스레드 생성
- 스레드 종료
- DllMain
- 스레드 로컬 저장소
- 정리
- 참고 문헌
- 스레드의 세부 사항
- 4장 스레드 고급 활용
- 스레드 상태
- 유저 모드 스레드 스택
- 내부 데이터 구조(KTHREAD, ETHREAD, TEB)
- 컨텍스트
- 스레드 생성과 종료 동작 원리
- 스레드 생성 과정
- 스레드 종료 과정
- 스레드 스케줄링
- 스레드 상태
- 스레드 우선순위
- 퀀텀
- 우선순위와 퀀텀 조정
- 실행 중지와 양보
- 스레드 중단
- 선호도: 특정 CPU를 선택해 실행
- 정리
- 참고 문헌
- 스레드 상태
- 5장 윈도우 커널 동기화
- 기본 개념: 시그널과 대기
- 커널 객체를 사용하는 이유
- 원시 코드에서 대기 처리
- 관리되는 코드
- APC
- 커널 객체 사용
- 뮤텍스
- 세마포어
- 뮤텍스와 세마포어를 이용한 예제: 차단/유한 큐
- 자동 리셋 이벤트/매뉴얼 리셋 이벤트
- 대기 가능 타이머
- 객체 시그널과 원자적인 대기
- 커널 객체 디버깅
- 정리
- 참고 문헌
- 기본 개념: 시그널과 대기
- 6장 데이터와 제어 동기화
- 상호 배제
- Win32 임계 구역
- CLR 락
- 읽기/쓰기 락
- 윈도우 비스타의 가벼운 읽기/쓰기 락
- 닷넷 프레임워크의 가벼운 읽기/쓰기 락
- 닷넷 프레임워크의 레거시 읽기/쓰기 락
- 조건 변수
- 윈도우 비스타 조건 변수
- 닷넷 프레임워크 모니터
- 보호된 영역
- 정리
- 참고 문헌
- 상호 배제
- 7장 스레드 풀
- 스레드 풀 101
- 세 가지 방법: 윈도우 비스타와 윈도우 레거시, CLR
- 공통 기능
- 윈도우 스레드 풀
- 윈도우 비스타 스레드 풀
- 레거시 Win32 스레드 풀
- CLR 스레드 풀
- 작업 아이템
- I/O 완성 포트
- 타이머
- 등록된 대기
- 기억할 것: 스레드를 소유하면 안 됨
- 스레드 풀 스레드 관리
- 디버깅
- 사례 연구: 스레드 풀의 최상위에서 우선순위와 격리 계층화
- 스레드 풀을 사용할 때 성능
- 정리
- 참고 문헌
- 스레드 풀 101
- 8장 비동기 프로그래밍 모델
- 비동기 프로그래밍 모델
- 만남: 네 가지 방법
- IAsyncResult 구현
- 닷넷 프레임워크에서 APM이 사용되는 장소
- ASP 닷넷 비동기 페이지
- 이벤트 기반의 비동기 패턴
- 기본 개념
- 취소 지원
- 진도 보고와 증가 결과 지원
- 닷넷 프레임워크에서 EAP가 사용되는 장소
- 정리
- 참고 문헌
- 비동기 프로그래밍 모델
- 9장 파이버
- 파이버 개요
- 긍정과 부정적인 측면
- 파이버 사용
- 새로운 파이버 생성
- 스레드를 파이버로 변환
- 스레드가 파이버인지 확인
- 파이버 간의 전환
- 파이버 삭제
- 현재 스레드 전환 예제
- 추가적인 파이버 관련 주제
- 파이버 지역 저장소
- 스레드 관련성
- 사례 연구: 파이버와 CLR
- 사용자 모드 스케줄러 구축
- 구현
- 스택 있는 차단과 스택이 없는 차단
- 정리
- 참고 문헌
- 파이버 개요
- 3부 테크닉
- 10장 메모리 락과 락 없는 프로그래밍
- 메모리 읽기와 쓰기 재배치
- 실행되는 것이 항상 작성한 것과 동일한 건 아니다
- 장벽으로서 임계 영역
- 데이터 종속과 재배치에의 영향
- 하드웨어 원자성
- 일반 읽기와 쓰기의 원자성
- 상호 락된 동작
- 메모리 일관성 모델
- 하드웨어 메모리 모델
- 메모리 장벽
- 닷넷 메모리 모델
- 락 없는 프로그래밍
- 낮은 락 코드 예제
- 지연 초기화와 이중 검사 락
- 비차단 스택과 ABA 문제
- 데커 알고리즘 다시 보기
- 정리
- 참고 문헌
- 메모리 읽기와 쓰기 재배치
- 11장 동시성 위험 요소
- 정확성 위험 요소
- 데이터 경쟁
- 재귀와 재진입
- 락과 프로세스 종료
- 라이브 위험 요소
- 데드락
- 놓친 깨움(놓친 펄스와 동일)
- 라이브락
- 락 수송
- 스탬피드
- 두 단계 춤
- 우선순위 도치와 기아
- 정리
- 참고 문헌
- 정확성 위험 요소
- 12장 병렬 컨테이너
- 소단위 락
- 배열
- FIFO 큐
- 연결 리스트
- 사전(해시 테이블)
- 락 없음
- 일반 목적의 락 없는 FIFO 큐
- 큐를 훔치는 작업
- 조직 컨테이너
- 생산자/소비자 데이터 구조
- 장애물을 가진 단계적 계산
- 정리
- 참고 문헌
- 소단위 락
- 13장 데이터와 태스크 병렬 처리
- 데이터 병렬성
- 루프와 반복
- 태스크 병렬성
- 포크/조인 병렬성
- 데이터 흐름 병렬성(미래와 약속)
- 재귀
- 파이프라인
- 검색
- 메시지 기반 병렬성
- 오류에 대한 우려
- 동시성 예외
- 취소
- 정리
- 참고 문헌
- 데이터 병렬성
- 14장 성능과 확장성
- 병렬 하드웨어 구조
- SMP와 CMP, HT
- 슈퍼 스칼라 실행
- 메모리 계층
- 비주얼 스튜디오의 프로파일링
- 속도 향상: 병렬 코드와 순차 코드
- 병렬 사용 결정
- 병렬성 성능 향상 측정
- 암달의 법칙
- 임계 경로와 부하 불균형
- 가비지 컬렉션과 확장성
- 반복 대기
- 윈도우에서 제대로 대기하는 방법
- 유일 반복 락
- Mellor-Crummey-Scott(MCS) 락
- 정리
- 참고 문헌
- 병렬 하드웨어 구조
- 4부 시스템
- 15장 입력과 출력
- 중첩된 I/O
- 중첩된 객체
- Win32 비동기 I/O
- 닷넷 프레임워크 비동기 I/O
- I/O 취소
- 현재 스레드에 비동기 I/O 취소
- 다른 스레드에 동기 I/O 취소
- 다른 스레드에 비동기 I/O 취소
- 정리
- 참고 문헌
- 중첩된 I/O
- 16장 그래픽 사용자 인터페이스
- GUI 스레딩 모델
- STA
- 반응성
- 닷넷 비동기 GUI 특성
- 닷넷 GUI 프레임워크
- 동기 컨텍스트
- 비동기 동작
- 편리한 패키지: BackgroundWorker
- 정리
- 참고 문헌
- GUI 스레딩 모델
- 5부 부록
- 부록 A 동시성 닷넷 프로그램에 재사용 가능한 라이브러리 설계
- 동시성에 관한 고견
- 세부 사항
- 락 모델
- 락 사용
- 안전성
- 스케줄링과 스레드
- 확장성과 성능
- 차단
- 참고 문헌
- 부록 B 닷넷 병렬 프로그래밍 확장
- 태스크 병렬 라이브러리
- 미처리 예외
- 부모와 자식
- 취소
- 미래
- 지속
- 태스크 관리자
- 전체 요약: 유용한 병렬 클래스
- 자체 복제 태스크
- 병렬 LINQ
- 버퍼링과 병합
- 순서 유지
- 동기 프리미티브
- ISupportsCancelation
- CountdownEvent
- LazyInit<T>
- ManualResetEventSlim
- SemaphoreSlim
- SpinLock
- SpinWait
- 동시성 컬렉션
- BlockingCollection<T>
- ConcurrentQueue<T>
- ConcurrentStack<T>
- 태스크 병렬 라이브러리