로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 

Concurrent Programming on Windows 한국어판

 [윈도우 시스템 프로그래밍 시리즈 11]
   
지은이 조 더피 / 황진호 역   |   출판사 에이콘  |   발행일 2012년 03월 30일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 50,000원45,000원 10%
마일리지 5% 2,500원
발행일 2012-03-30
ISBN 8960772887 |  9788960772885
기타정보 번역서 | 1048쪽 | 일반
예상출고일 1~2일 이내 (근무일기준)
배송비 무료배송
   
운영체계(OS)
종합지수 1p 630 위
   
이 책의 원서
  Concurrent Programming on Windows
Addison-Wesley Professional | Joe Duffy
 

[출판사서평]

동시성∙병렬성은 결국 모든 소프트웨어 개발자에게 중요한 부분이며, 운영체제에서 시작해 라이브러리를 거쳐 애플리케이션 자체까지 영향이 미친다. 이 책에서는 동시성에 대한 이해를 돕기 위해 동시성의 개념을 소개하고, 플랫폼 특징, 내부 동작, API에 관해 상세하게 기술한다. 그리고 동시성 소프트웨어를 작성하는 병렬 프로그래밍 시에 나타나는 공통 패턴과 최적의 실행, 알고리즘, 데이터 구조를 설명하고, 이런 내용을 바탕으로 전체 시스템 구조와 자주 발생하는 프로세스에서 중요한 내용을 다룬다.


< 소개 >

저자 조 더피는 동시성과 하드웨어 병렬성의 최적 이득을 얻을 수 있는 소프트웨어 작성 방법을 설명하는 도전을 했다. 이 책에서 그는 주로 윈도우의 C#과 C++을 사용해 큰 규모의 병렬 프로그램을 설계하고, 구현하고, 유지하는 방법을 설명한다.

더피는 애플리케이션과 시스템, 라이브러리 개발자에게 멀티코어 프로세서를 위한 효율적이고 안전한 코드를 작성하는 데 필요한 도구와 기술을 전달하는 것을 목표로 한다. 이런 목적은 동시성이 내재되고 사용하기 쉬운 서버 애플리케이션과 계산 위주의 이미지 조작, 금융 분석, 시뮬레이션, AI 알고리즘 등의 프로그램의 종류뿐만 아니라, 더 많은 노력을 바탕으로 동시성을 사용해 속도를 향상시킬 수 있는 수학 라이브러리와 정렬 루틴, 보고서 생성, XML 조작, 스트림 프로세싱 알고리즘 등의 문제에도 중요하다.

이 책은 4개의 주요 부분으로 구성했다. 첫 번째로 높은 수준에서 동시성을 설명하고, 다음은 근본적인 플랫폼 특징과 내부 작업에 집중한다. 다음으로 동시성 소프트웨어를 작성할 때 발생하는 공통적인 패턴과 최적의 실습, 알고리즘, 데이터 구조를 설명하는 부분을 포함한다. 마지막 부분은 동시성 프로그래밍의 일반적인 시스템 아키텍처와 프로세스 관련 내용을 다룬다.


★ 이 책의 구성 ★

이 책은 네 개의 부분으로 구성했다. ‘1부 개념’은 어느 하나의 주제를 깊게 파고들지 않고 높은 수준의 동시성을 소개한다. ‘2부 메커니즘’은 플랫폼 특징, 내부 동작, API 상세 설명에 관해 바로 초점을 맞췄다. ‘3부 테크닉’은 동시성 소프트웨어를 작성할 때 나타나는 공통 패턴과 최적의 실행, 알고리즘, 데이터 구조를 설명한다. ‘4부 시스템’은 전체 시스템 구조와 자주 발생하는 프로세스에서 중요한 내용을 다룬다. 여기서는 연속성이 있다. ‘개념’은 일반적인 동시성을 기본적으로 이해하게 돕기 때문에 첫 번째다. ‘테크닉’을 이해하는 것은 ‘메커니즘’에 대한 확실한 이해가 없으면 어려울 것이며, 비슷하게 실제 ‘시스템’을 만드는 것은 나머지를 이해하지 않고서는 불가능하다. 마지막에 두 개의 부록도 있다.


★ 이 책에 쏟아진 각계의 찬사 ★

핵심 마이크로소프트 기술의 책임자들과 관리자들의 지원을 받아 마이크로소프트와 크게는 개발자 커뮤니티에서 선도적인 소프트웨어 설계자와 개발자들이 산업계에서 가장 통찰력 있는 저술을 합쳐놓은 풀을 형성했다.
- 돈 박스(Don Box), 설계자, 마이크로소프트

이 책은 전문적인 닷넷 개발자에게 훌륭한 자원이다. 참조와 방법에 관해 전문가적인 시각에서 모든 기본적인 내용을 다룬다. 이 시리즈의 책들은 지식 기반과 전문성을 판단력 있게 확장하려고 하는 사람들을 위한 필독서다.
- 존 몽고메리(John Montgomery), 그룹 프로그램 관리 책임자, 마이크로소프트 개발자 그룹

마이크로소프트 닷넷 시리즈는 닷넷 프레임워크에서 정보를 얻을 필요가 있는 개발자를 위한 핵심적인 정보를 포함한다. 이 시리즈의 저자들은 기술을 창시한 핵심 혁신자 중에 선택됐고, 가장 존경받는 참여자다.
- 브래드 에이브럼즈(Brad Abrams), 그룹 프로그램 매니저, 마이크로소프트

10년 전 공통 언어 런타임(CLR, Common Language Runtime)에 스레드 지원을 추가한 이후로 동시성에 매료됐다. 그로 인해 동시성 분야의 세계적인 전문가인 조를 만나기도 했다. 요즘 동시성은 실제적으로 모든 개발자에게 있어 첫 번째 관심사다. 조의 책에 감사한다. 이것은 역작이며, 다가올 수년 동안 읽힐 책이다.
- 크리스 브룸(Chris Brumme) / 마이크로소프트의 유명한 엔지니어

마이크로소프트의 공통 언어 런타임 팀에서 함께 일할 때 조를 만났다. 그 당시 우리는 스레드에 관해 많은 토론을 했으며, 그는 분명 나처럼 이 주제에 관해 열정적이었다. 그 후 조는 마이크로소프트의 병렬 컴퓨팅 플랫폼 팀으로 옮겼고, 그곳에서 스레드에 관한 그의 좋은 아이디어가 결실을 맺기도 했다. 내가 발견한 스레드와 동시성 관련 책은 대부분 부정확한 정보를 포함하고, 애초에 컴퓨터 아키텍처를 잘 설계한 경우에는 절대 발생하지 않을 이상한 문제를 어떻게 해결하는지 설명한다. 조의 책은 이런 문제에 관해 내가 존경하는 몇 안 되는 책 중 하나이며, 이런 존경심은 조의 지식과 경험, 개념을 설명하는 그의 능력을 바탕으로 우러난 것이다.
- 제프리 리처(Jeffrey Richter) / Wintellect

동시성처럼 중요하거나 미스터리에 가려진 분야는 컴퓨팅 영역에서 몇 개 되지 않는다. 그것은 간단하지 않고, 더피는 그렇다고 주장하지도 않는다. 하지만 정확한 정보와 훌륭한 조언으로 무장하고, 적어도 정확하고 높은 확장성을 제공하는 시스템을 만드는 것은 가능하다. 자존심 있는 모든 윈도우 개발자는 이 책을 읽어야 한다.
- 조나단 스키트(Jonathan Skeet) / 클리어스위프트(Clearswift)의 소프트웨어 엔지니어

이 책에 관해 내가 좋아하는 부분은 윈도우 플랫폼에서 동시성의 범위가 포괄적이고, 실제 소프트웨어 개발에 즉시 활용할 만큼 매우 실질적인 기술을 보여준다는 점이다. 조의 책은 동시성을 다루는 원시 코드나 관리되는 코드의 윈도우 애플리케이션을 만드는 모든 사람이 ‘꼭’ 가져야만 하는 자원이다.
- 스티브 테이세리아(Steve Teixeria) / 마이크로소프트 병렬 컴퓨팅 플랫폼의 제품 구성 매니저


이 책은 효과적인 병렬 애플리케이션을 작성하는 데 이론적인 지식과 실제적인 안내를 하는 훌륭한 가이드다. 조 더피는 윈도우에서 예술적인 동시성 애플리케이션을 개발하는 뛰어난 전문가일 뿐만 아니라, 예술적인 집필에 있어 충실한 학생이다. 이 책에서 그는 가치 있는 것을 만들기 위해 두 가지 기술을 조합했으며, 개발자의 손이 닿는 어디에서건 오랫동안 최고가 될 운명이다.
- 스티븐 토웁(Stephen Toub) / 마이크로소프트의 병렬 컴퓨팅 플랫폼의 프로그램 관리자

칩 디자이너는 개별 칩을 더 빠르게 하는 방법을 다 써버렸기 때문에 병렬 컴퓨터 용량을 추가하는 방향으로 이동했다. 멀티코어를 가진 PC는 이제 흔하다. 우리는 향상된 성능이 더욱 빠른 칩으로부터 오는 것이 아니라 동시성을 이용한 소프트웨어 개발자의 능력에서 오는 변곡점에 서있다. 병렬 프로그래밍의 개념과 병렬 코드를 어떻게 작성하는지에 대한 이해는 성공적인 소프트웨어를 작성하는 데 있어 중요한 부분이 됐다. 이 책에서 조 더피는 기초부터 고급 기술까지 아우르는 동시성의 개념을 훌륭히 소화했다. 알고리즘과 하부 하드웨어와의 상호작용에 대한 자세한 설명은 복잡한 주제를 매우 이해하기 쉽게 만들었다. 이 책은 윈도우에서 동시성 소프트웨어를 작성할 때 옆에 둘 훌륭한 지침서다.
- 제이슨 잰더(Jason Zander) / 마이크로소프트 비주얼 스튜디오의 총괄 매니저


★ 추천의 글 ★

컴퓨터 산업은 다시 한 번 교차로에 서있다. 늘어나는 소프트웨어의 복잡성과 함께 새로운 멀티코어 프로세서 형태의 하드웨어 동시성은 기술 산업이 기본적으로 현대 컴퓨터의 아키텍처와 그에 따른 소프트웨어 개발 패러다임 모두를 재고하게 할 것이다.

지난 수십 년 동안 컴퓨터는 기본적인 계산 모델의 근본적인 변화 없이 기하급수적인 성능과 용량의 증가와 함께 아무 문제없이 발전했다. 하드웨어는 무어의 법칙(Moore's Law)을 따랐으며, 클록 속도는 증가했고, 소프트웨어는 끊임없는 향상된 성능을 이용하게 작성됐으며, 종종 하드웨어 향상 속도보다 앞서갔다. 하드웨어와 소프트웨어의 공생 관계는 최근까지 조금도 수그러들지 않고 계속 됐다. 무어의 법칙은 여전히 영향력이 있지만, 클록 속도도 상응해 증가할 것이라는 이름 없는 법칙은 사라졌다.

하드웨어의 방향성에 있어 이런 변화의 이유는 버클리에 있는 캘리포니아 대학의 데이비드 패터슨(David Patterson)에 의해 표현된 간단한 수식으로 요약될 수 있다.

파워 장벽 + 메모리 장벽 + ILP 장벽 = 연쇄적인 성능의 큰 장벽

CPU 파워는 클록 속도에 실질적으로 영향을 미치는 클록 주파수에 비례해 증가한다. 열을 소멸하는 능력은 실질적으로 물리적인 한계에 도달했다. 그 결과 굉장한(그리고 비싼) 냉각 기술(또는 물질 기술의 돌파구)이 없다면 클록 속도의 증가는 불가능하다. 이것이 수식에서 ‘파워 장벽’ 부분이다. 메모리 성능 개선은 점점 더 프로세서 성능의 이득에 미치지 못한다. 이것은 메인 메모리에 접근이 요구되는 CPU 사이클의 수는 계속해서 증가하게 할 것이다. 이것이 ‘메모리 장벽’이다. 마지막으로 하드웨어 엔지니어는 현재 명령어의 결과를 알기 전에 미리 짐작해 명령어를 실행하게 함으로써 연속적인 소프트웨어 성능을 증가시켰다. 이것은 명령어 레벨 병렬성(ILP, Instruction Level Parallelism)이라고 한다. ILP의 성능 향상은 짐작하기 어렵고, 복잡성은 전력 소비를 증가시킨다. 결과적으로 ILP의 개선은 멈춘 상태이며, 이는 ‘ILP 장벽’이라고 한다.

그러므로 우리는 변곡점에 도달했다. 소프트웨어 생태계는 멀티코어 시스템을 더 잘 지원하게 발전해야만 하고, 이런 진화는 시간이 걸릴 것이다. 급속히 발전하는 컴퓨터 성능에서 혜택을 보고, ‘새로운 하드웨어에서 한 번 작성하고 더 빨리 실행된다’는 패러다임을 유지하려면 프로그래밍 커뮤니티는 동시성 애플리케이션을 설계하는 방법을 배워야만 한다. 동시성의 방대한 수용성은 비동시성과 느슨한 결합, 클라이언트 측의 병렬성, 서버 측의 클라우드 컴퓨팅을 가능하게 할 것이다.

윈도우와 닷넷 프레임워크 플랫폼은 동시성을 풍부하게 지원한다. 이런 지원은 윈도우 NT에서 멀티프로세서를 지원한 이후로 10년 이상 발전했다. 스레드 스케줄링 성능과 동기화 API(Application Programming Interface), 메모리 구조 인식(특히 윈도우 비스타에 추가된 것)의 계속된 성능 개선은 윈도우를 하드웨어 동시성의 사용을 극대화하는 운영체제로 선택하게 한다. 이 책은 이런 모든 영역을 다룬다. 애플리케이션을 통해 멀티스레드를 사용하기 시작할 때 깔끔한 아키텍처와 설계의 중요성은 소프트웨어의 복잡성을 줄이고 유지 보수를 개선하는 데 대단히 중요하다. 이것은 플랫폼의 성능뿐만 아니라 최고의 실행성을 드러내는 방법을 이해하도록 강조한다. 조는 이 책을 통해 메커니즘과 더불어 최고의 실행성을 배치하는 데 대단한 일을 했다.

멀티코어는 이미 만든 애플리케이션에 개선된 성능을 제공한다. 그러나 컴퓨터가 사람들을 위해 무엇을 할 수 있어야만 하는가에 대해 완전히 다르게 생각할 기회도 제공한다. 컴퓨터 파워의 계속된 증가는 사람들에게 더욱 흥미롭고 도움이 되는 방법으로 만들 수 있는 애플리케이션을 질적으로 바꿔 놓을 것이며, 이전에는 전혀 불가능한 새로운 것들을 할 수 있을 것이다. 이런 진화를 바탕으로 소프트웨어는 컴퓨터와 상호 작용하는 방법을 더욱 개인적이고 인간적인 방법으로 가능하게 할 것이다. 그러므로 이 책을 즐기기 바란다. 이것은 윈도우 플랫폼에서 동시성과 멀티코어를 인식하는 소프트웨어를 작성하는 데 첫발을 내딛도록 안내할 것이다.

- 2008년 6월
크레이그 먼디(Craig Mundie) /마이크로소프트 연구∙전략 최고 책임자


★ 저자 서문 ★

나는 2005년 말쯤 이 책을 집필하기 시작했다. 그 당시에는 듀얼 코어 프로세서가 일반 고객(프로그래머가 아닌)이 구입하는 주류 PC의 표준이었고, 산업계의 일부 사람들이 곧 들이닥칠 동시성 문제에 대해 얘기하기 시작했다(허브 서터Herb Sutter의 논문인 공짜 점심은 끝났다가 생각난다). 물론 사람들이 걱정하는 문제는 과거의 소프트웨어가 추가적인 계산 파워를 자연스럽게 사용할 수 있게 하는 방법으로 작성되지 않았다는 점이다. 클록 속도의 끝없는 증가와는 대조된다. 실질적으로 공짜 점심은 없는 것이다.

동시성은 결국 모든 소프트웨어 개발자의 일에 중요한 부분이 될 것이고, 이런 책은 중요하고 유용한 것이 될 것처럼 보인다. 2년 후에는 운영체제에서 시작해 라이브러리를 거쳐 애플리케이션 자체까지 영향이 미칠 것이다.

이것은 6개월간 작업한 작은 부업 프로젝트인 병렬 언어 통합 쿼리(PLINQ, Parallel Language Integrated Query)의 원형을 마무리 짓던 시기와 일치한다. PLINQ 프로젝트는 동시성과 멀티코어, 특히 동시성이 실제로 일상적인 프로그램에 어떻게 사용되는지에 대한 복잡성을 탐구할 수 있는 통로가 됐다. 나는 동시성을 플랫폼의 어디가 부족한지 알아내는 도구로 사용했다. 이것은 마이크로소프트에서 본업과 더불어 2년간 어느 정도 산업계의 유행어가 된 기술인 소프트웨어 전이 메모리(STM, Software Transitional Memory)에 집중돼 있다. 말할 필요도 없이 동시성의 모든 주제에 관해 꽤나 견고한 지식을 갖게 됐다. 그 주제에 관해 책을 집필하는 것보다 더욱 견고하게 하는 좋은 방법이 있는가?

이런 모든 프로젝트에 종사하고, 결국 PLINQ는 닷넷 프레임워크 기술의 병렬 확장(Parallel Extension)으로 발전됨에 따라 윈도우에서 동시성에 관한 좋은 책이 얼마나 적은지 알고 놀랬다. 나는 계속해서 동시성과 관련된 정보의 복잡성과 소수만 이해하는 내용에 놀라거나 신기해했던 것을 기억한다. 이 내용은 책에 포함하려고 적어두고 특정 목적에 배정했다. 나는 단지 누군가가 전에 이것을 작성해 놓음으로써 복도에서 대화와, 윈도우와 CLR 소스코드에 쏟아 부은 긴 밤, 엄청나게 많은 마이크로소프트 직원의 블로그를 읽고 또 읽는 등의 여러 소스를 샅샅이 뒤질 필요가 없기를 바랐다. 그러나 이 주제에 관한 최고의 책은 90년대 초반으로 거슬러 올라갔고, 여전히 훌륭하긴 하지만 기계학에 중점을 두고 있으며, 병렬 프로그램의 구조화, 병렬 알고리즘의 구현, 병렬성의 위험 요소 처리를 포함한 모든 중요한 개념에 대해서는 충분하지 않았다. 다른 모든 것은 애플리케이션과 시스템, 라이브러리 개발자보다는 학계와 연구자들을 목표로 했다.

나는 스스로 배워면서 찾아냈던 무작위의 모든 정보를 손쉬운 방법으로 처리하는 매력적이고 유용한 방법을 책으로 집필하기 시작했다. 이 책을 끝내는 데 놀랍게도 긴 시간인 2년 반이 걸렸지만, 기술은 천천히 발전하고, 이 주제에 대한 좋은 책의 상태도 그렇게 많이 변하지 않았다. 내가 바라는 노력의 결과는 실제적이고 유용하지만, 여전히 매우 심도 깊은 기술 정보를 포함한 새로운 책이다. 이 책은 장래에 동시성이 모든 소프트웨어의 기본 요구 조건이 될 것이라고 믿는 모든 윈도우 개발자나 닷넷 개발자를 위한 책이다. 이것은 마치 모든 산업의 트렌드를 의미하는 것처럼 보인다.

나는 긴장을 풀고 여유로운 마음으로 이 책을 즐기길 바란다. 그리고 독자들도 그렇게 하길 바란다.


★ 옮긴이의 말 ★

현재 우리는 엄청난 컴퓨팅 패러다임의 발전을 경험하고 있다. 기술적으로 동시성과 병렬성이 동시적으로 발전하고 있는 형태라고 할 수 있다. 여기서 동시성 프로그래밍(concurrent programming)은 프로그램이 여러 개의 동시적인 스레드로 실행이 되고 따라서 결과가 비결정적인 특성이 있다. 반면에 병렬 프로그래밍(parallel programming)은 성능 향상을 목적으로 명시적으로 멀티 프로세서를 사용하는 기술을 말한다. 이는 동시성과 병렬성 모두에 기반한 양적인 증가(클라우드, 멀티코어 프로세스)뿐만 아니라 동시성에 기반한 그 다양성(모바일, 태블릿)에 있어서도 여러 가지 시도가 이루어지고 있다. 이런 다양한 하드웨어적인 환경에서 개발자들은 동시성에 대해서 반드시 학습해야 한다. 특히나 작은 모바일이 멀티, 쿼드 코어 시대로 나아가고 있고, 대용량의 컴퓨팅을 위해서 엔비디아(NVIDIA) 사는 그래픽에만 이용되던 GPU(Graphic Processing Unit)를 GP(General Purpose)-GPU라고 불리는 형태로 보조적인 계산에도 이용하고 있다.

우선 모바일 컴퓨팅의 변화를 살펴보기 위해서는 크게 애플의 iOS와 구글의 안드로이드의 발전상을 관찰하면 쉽게 확인할 수 있다. 초기 iOS 모델은 개발자들의 멀티 태스킹에 대한 접근을 철저하게 방지했다. 이유는 시스템의 안정성 때문이었다. 하지만 iOS가 발전함에 따라서 애플은 멀티 태스킹에 안정성을 보장하게 됐고, 개발자도 동시성을 이용한 프로그래밍을 할 수 있는 단계에 이르게 됐다. 이는 싱글 코어 하드웨어에서 멀티 코어 하드웨어로 나아가는 관문을 통과했다고 볼 수 있다. iOS와는 달리 안드로이드는 최초 소프트웨어 개발자 키트(SDK)를 배포할 때부터 동시성에 대해서 개발자에게 공개했지만, 많은 버그 수정과 테스트 끝에 지금은 엄청난 안정성을 보여주고 있다. 이러한 모바일 플랫폼에서 개발자의 동시성에 대한 이해는 시스템의 안정성뿐만 아니라 효율성도 높이는 아주 중요한 요소로 인식되고 있다.

요즘 많은 이슈가 되고 있는 빅 데이터(Big Data)의 처리는 대부분 클라우드 컴퓨팅(Cloud Computing)이라는 대규모 데이터 센터에서 이루어지고 있다. 클라우드 컴퓨팅의 기본은 병렬성이며, 기본적인 처리 방법은 데이터를 작은 조각으로 나누고, 여러 컴퓨터에 나누어서 다루는 것이다. 이러한 기술은 흔히 맵리듀스(Map-Reduce)라고 불리며, 가장 대표적인 플랫폼으로는 하둡(Hadoop)이라는 아파치 공개 소프트웨어가 있다. 여기서 병렬성의 개념은 동시성의 확장이라고 이해하면 된다. 로컬의 여러 스레드(프로세스)가 동시에 작업을 진행하던 것을 여러 컴퓨터가 작업한다는 의미인 것이다. 이러한 기본적인 이해를 높이기 위해서 이 책의 내용을 학습하는 것은 필수라고 할 수 있다.

마지막으로 프로세서 자체의 발전상을 이해해야 한다. 지금까지 인텔과 AMD에서 주도하던 프로세서 아키텍처에 새로운 패러다임을 제시한 엔비디아 사는 수백 개의 코어를 이용한 컴퓨팅을 전제로 한다. 하지만 엔비디아 사의 GPU는 자체적으로 동작하기보다는 대용량 컴퓨팅이 필요한 작업에 대해서 인텔과 AMD 프로세서의 보조 역할로서 자리매김하고 있다. GPU의 여러 프로세서(코어)는 하나의 큰 주 메모리를 가지고 있으며, 코어 그룹인 블록(Block)은 공유 메모리를 가지고 있다. 이런 메모리 구조의 계층화는 동시성의 필요성을 높이는 계기가 됐다고 할 수 있다.

이런 모든 발전상을 완전히 따라가는 것은 무리가 있지만, 이 책에서 설명하는 기본 개념을 알고 있다면 개발자들은 어떠한 플랫폼에서 개발을 하더라도 엄청난 적응력을 발휘할 수 있을 것이다. 참고로 이 책은 번역서의 특성상 이 책에 출간된 당시에 OS 버전인 윈도우 비스타와 2008을 대상으로 하며 윈도우 7이나 8의 세부 기술에 대해서는 논의하지 않는다. 따라서 최신 업데이트된 정보를 얻기에는 한계가 있으나 윈도우의 동시성 프로그래밍의 근본 사상을 깨우치는 데는 충분히 참고할 만하다. 모바일 개발자뿐만 아니라, 클라우드 개발자, GPU 개발자 모두가 이 책의 개념을 완벽히 이해할 수 있기를 바라며 강력히 추천한다.
1부 개념

1장 개요
___동시성을 사용해야 하는 이유
___프로그램 구조와 동시성
___병렬화 계층
___동시성을 사용하면 안 되는 경우
___정리
___참고 문헌

2장 동기화와 시간
___프로그램 상태 관리
______공유 상태/비공개 상태 식별
______상태 기계와 시간
______격리성
______불변성
___동기화: 종류와 기법
______데이터 동기화
______조정과 제어 동기화
___정리
___참고 문헌

2부 메커니즘

3장 스레드
___스레드의 세부 사항
______윈도우 스레드란?
______CLR 스레드란?
______명시적 스레딩과 대안
___스레드의 탄생과 죽음
______스레드 생성
______스레드 종료
______DllMain
______스레드 로컬 저장소
___정리
___참고 문헌

4장 스레드 고급 활용
___스레드 상태
______유저 모드 스레드 스택
______내부 데이터 구조(KTHREAD, ETHREAD, TEB)
______컨텍스트
___스레드 생성과 종료 동작 원리
______스레드 생성 과정
______스레드 종료 과정
___스레드 스케줄링
______스레드 상태
______스레드 우선순위
______퀀텀
______우선순위와 퀀텀 조정
______실행 중지(sleep)와 양보(yield)
______스레드 중단
______선호도: 특정 CPU를 선택해 실행
___정리
___참고 문헌

5장 윈도우 커널 동기화
___기본 개념: 시그널과 대기
______커널 객체를 사용하는 이유
______원시 코드에서 대기 처리
______관리되는 코드
______APC
___커널 객체 사용
______뮤텍스
______세마포어
______뮤텍스와 세마포어를 이용한 예제: 차단/유한 큐
______자동 리셋 이벤트/매뉴얼 리셋 이벤트
______대기 가능 타이머
______객체 시그널과 원자적인 대기
______커널 객체 디버깅
___정리
___참고 문헌

6장 데이터와 제어 동기화
___상호 배제
______Win32 임계 구역
______CLR 락
___읽기/쓰기 락(RWL)
______윈도우 비스타의 가벼운 읽기/쓰기 락
______닷넷 프레임워크의 가벼운 읽기/쓰기 락(3.5)
______닷넷 프레임워크의 레거시(legacy) 읽기/쓰기 락
___조건 변수
______윈도우 비스타 조건 변수
______닷넷 프레임워크 모니터
______보호된 영역(Guarded Region)
___정리
___참고 문헌

7장 스레드 풀
___스레드 풀 101
______세 가지 방법: 윈도우 비스타와 윈도우 레거시, CLR
______공통 기능
___윈도우 스레드 풀
______윈도우 비스타 스레드 풀
______레거시 Win32 스레드 풀
___CLR 스레드 풀
______작업 아이템
______I/O 완성 포트
______타이머
______등록된 대기
______기억할 것: 스레드를 소유하면 안 된다.
______스레드 풀 스레드 관리
______디버깅
______사례 연구: 스레드 풀의 최상위에서 우선순위와 격리 계층화
___스레드 풀을 사용할 때 성능
___정리
___참고 문헌

8장 비동기 프로그래밍 모델
___비동기 프로그래밍 모델(APM)
______만남: 네 가지 방법
______IAsyncResult 구현
______닷넷 프레임워크에서 APM이 사용되는 장소
______ASP 닷넷 비동기 페이지
___이벤트 기반의 비동기 패턴
______기본 개념
______취소 지원
______진도 보고와 증가 결과 지원
______닷넷 프레임워크에서 EAP가 사용되는 장소
___정리
___참고 문헌

9장 파이버
___파이버 개요
______긍정과 부정적인 측면
___파이버 사용
______새로운 파이버 생성
______스레드를 파이버로 변환
______스레드가 파이버인지 확인
______파이버 간의 전환
______파이버 삭제
______현재 스레드 전환 예제
___추가적인 파이버 관련 주제
______파이버 지역 저장소(FLS, Fiber Local Storage)
______스레드 관련성
______사례 연구: 파이버와 CLR
___사용자 모드 스케줄러 구축
______구현
______스택 있는 차단과 스택이 없는 차단
___정리
___참고 문헌

3부 테크닉

10장 메모리 락과 락 없는 프로그래밍
___메모리 읽기와 쓰기 재배치
______실행되는 것이 항상 작성한 것과 동일한 건 아니다
______장벽으로서 임계 영역
______데이터 종속과 재배치에의 영향
___하드웨어 원자성
______일반 읽기와 쓰기의 원자성
______상호 락된 동작
___메모리 일관성 모델
______하드웨어 메모리 모델
______메모리 장벽
______닷넷 메모리 모델
______락 없는 프로그래밍
___낮은 락 코드 예제
______지연 초기화와 이중 검사 락
______비차단 스택과 ABA 문제
______데커 알고리즘 다시 보기
___정리
___참고 문헌

11장 동시성 위험 요소
___정확성 위험 요소
______데이터 경쟁
______재귀와 재진입
______락과 프로세스 종료
___라이브 위험 요소
______데드락
______놓친 깨움(놓친 펄스와 동일)
______라이브락
______락 수송
______몰기(Stampeding)
______두 단계 춤
______우선순위 도치와 기아
___정리
___참고 문헌

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 취소
___정리
___참고 문헌

16장 그래픽 사용자 인터페이스
___GUI 스레딩 모델
______STA
______반응성
___닷넷 비동기 GUI 특성
______닷넷 GUI 프레임워크
______동기 컨텍스트
______비동기 동작
______편리한 패키지: BackgroundWorker
___정리
___참고 문헌

5부 부록

부록 A 동시성 닷넷 프로그램에 재사용 가능한 라이브러리 설계
___동시성에 관한 고견
___세부 사항
______락 모델
______락 사용
______안전성
______스케줄링과 스레드
______확장성과 성능
______차단
___참고 문헌

부록 B 닷넷 병렬 프로그래밍 확장
___태스크 병렬 라이브러리
______미처리 예외
______부모와 자식
______취소
______미래
______지속
______태스크 관리자
______전체 요약: 유용한 병렬 클래스
______자체 복제 태스크
___병렬 LINQ
______버퍼링과 병합
______순서 유지
___동기 프리미티브
______ISupportsCancelation
______CountdownEvent
______LazyInit
______ManualResetEventSlim
______SemaphoreSlim
______SpinLock
______SpinWait
___동시성 컬렉션
______BlockingCollection
______ConcurrentQueue
______ConcurrentStack
___참고 문헌
조 더피(Joe Duffy)
비주얼 스튜디오 분과의 개발 책임자이자 설계자이며, 마이크로소프트의 닷넷 프레임워크 팀의 병렬 확장(Parallel Extension)의 창시자다. 코드를 해킹하고 훌륭한 개발자 팀을 관리하는 일과 더불어 팀의 장기적인 비전과 전략을 수립한다. 현재 관심사는 함수형 프로그래밍 모델과 형식 시스템에서 우선 동시성 안전(first-class concurrency safety), GPU와 SIMD 스타일 프로세서의 활용을 가능하게 하는 프로그래밍 모델을 만드는 것이다. 이전에 마이크로소프트에서 병렬 LINQ(PLINQ)의 개발자와 공통 언어 런타임(CLR)에서 동시성 프로그램 관리자로 활약했다. 마이크로소프트에 합류하기 전에는 EMC에서의 4년을 포함해 7년간 전문 프로그래밍 경험을 쌓았다. 매사추세츠에서 태어나 현재는 워싱턴에서 살고 있다. 기술적인 작업에 몰두하지 않을 때는 기타를 치고, 음악 이론에 대해 공부하며, 음악을 듣거나 작곡하며, 와인에 대한 갈증을 해소한다.


[역자소개]
황진호

IT 경력은 미국에서 시작됐다. 석사 과정을 마치고 1년여 동안 미국의 연구기관에서 방문 연구원으로 재직했다. 미국에서 유명 통신회사의 시스템을 연구/개발하는 몇 가지 프로젝트를 마무리하고, 한국으로 돌아와 포스코 ICT에서 통신 시스템 소프트웨어 개발자로 3년 동안 근무했다. 현재 미국의 조지 워싱턴 대학교의 컴퓨터 사이언스 학과에서 박사 과정을 밟는 중이며, 주 연구 분야는 클라우드 컴퓨팅과 빅 데이터 처리다. 에이콘출판사에서 출간한 『Learning PHP, MySQL & JavaScript 한국어판』(2011)을 번역했다.
번역이 너무하네요.
추교성님이 쓰신 서평보기 I 평점 I 조회수(1359) I 공감 (1) I 블로그
300페이지 정도 보고 있는데 번역하신분이 자신이 번역한걸 한번이라도 읽어본건지 의심이 들정도의 문장들이 보입니다. 좋은책이 번역되어 나와서 기쁜마음으로 구매를 했는데 그냥 책장에 장식용으로 넣어놓고 원서봐야 겠네요. 번역하신 분한테는 죄송하시만 이 책을 구매하시려는 분이 있으시면 정말 자신이 영어를 못한다고 생각되시거나 원서를 옆어 놓고 같이 보실분이 구매하시는 것이 좋겠습니다. 
번역이...
나성훈님이 쓰신 서평보기 I 평점 I 조회수(1212) I 공감 (1) I 블로그
우선 번역이 좋지 않군요. 한국어를 재해석해야 할 정도 같습니다.중요한 핵심포인트를 제외한 부분은 번역으로 인해서그냥 건너뛰고 읽게 되었네요. 
번역이 잘 된 편은 아니라고 생각합니다.
전종우님이 쓰신 서평보기 I 평점 I 조회수(937) I 공감 (0) I 블로그
과도한 번역들도 눈에 보이고, 문법에 맞는 문장이 아닌 것들도 눈에 띄네요.읽으면서 원문은 어땠을까 생각되는 내용들도 있습니다.책의 내용은 좋은 것 같은데 안타깝네요.
리눅스(Linux) 그대로 따라하기...
서자룡
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
 
전체평균(88)
회원평점   회원서평수 3
번역이 너무하네요.
추교성 님  2012-10-29
번역이...
나성훈 님  2012-06-12
번역이 잘 된 편은 아니라고 생각합니다.
전종우 님  2012-04-13
Joe Duffy 의 최근 저서
 
Children of the Troubles
30,230원
(20%↓+1%)
 
International Perspectives on Social Work and Political Conflict
163,800원
(22%↓+1%)
 
Duffy's Dublin
32,470원
(20%↓+1%)
 
Service User Involvement in Social Work Education
169,260원
(22%↓+1%)
 
Relishing Marketing: Illustrations of Food & Drink Packaging
44,740원
(20%↓+1%)
 
에이콘 출판사의 신간
매니지먼트 3.0 - 모두가 행복한 애자일 매니지먼트(애자일)
위르헌 아펄로/조승빈 저
25,200원
(10%↓+5%)
 
통계학으로 배우는 머신러닝 2/e
트레버 헤이스티/이판호 저
54,000원
(10%↓+5%)
 
텐서플로로 하는 딥러닝 기초와 응용
파올로 갈리오니/김창엽 저
27,000원
(10%↓+5%)
 
스프링으로 하는 마이크로서비스 구축
매그너스 라슨/박규태 저
36,000원
(10%↓+5%)
 
따라 하면서 마스터하는 네트워크와 네트워크 보안 2/e
현정훈 저
49,500원
(10%↓+5%)
 
이메일주소수집거부