10년 전 공통 언어 런타임(CLR, Common Language Runtime)에 스레드 지원을 추가한 이후로 동시성에 매료됐다. 덕분에 동시성 분야의 세계적인 전문가인 조를 만나기도 했다. 요즘 동시성(concurrency)은 모든 개발자에게 가장 큰 관심사 중 하나다. 조의 책에 감사한다. 이것은 역작이며, 다가올 수년 동안 읽힐 책이다.
크리스 브룸(Chris Brumme) (마이크로소프트의 유명한 엔지니어)
마이크로소프트의 공통 언어 런타임 팀에서 함께 일할 때 조를 만났다. 그 당시 우리는 스레드에 관해 많은 토론을 했으며, 조는 분명 나처럼 이 주제에 관해 열정적이었다. 그 후 조는 마이크로소프트의 병렬 컴퓨팅 플랫폼 팀으로 옮겼고, 그곳에서 스레드에 관한 그의 좋은 아이디어가 결실을 맺기도 했다. 내가 발견한 스레드와 동시성 관련 책은 대부분 부정확한 정보를 포함하고, 애초에 컴퓨터 아키텍처를 잘 설계한 경우라면 절대 발생하지 않을 이상한 문제를 어떻게 해결하는지 설명한다. 조의 책은 이런 문제를 극복한 몇 안 되는 책 중 하나이며, 이런 나의 경외감은 조의 지식과 경험, 개념을 설명하는 그의 능력을 바탕으로 우러난 것이다.
제프리 리처(Jeffrey Richter) (Wintellect)
동시성처럼 중요하면서도 미스터리에 가려진 분야는 컴퓨팅 영역에서 흔치 않다. 단순한 분야가 아니며, 더피 또한 쉽다고 주장하지 않는다. 하지만 정확한 정보와 훌륭한 조언으로 무장한다면 정확하고 높은 확장성을 제공하는 시스템을 만드는 것은 얼마든지 가능하다. 자존감이 있는 모든 윈도우 개발자라면 반드시 이 책을 읽어야 한다.
조나단 스키트(Jonathan Skeet) (클리어스위프트(Clearswift)의 소프트웨어 엔지니어)
이 책에 관해 내가 좋아하는 부분은 윈도우 플랫폼에서 동시성의 범위를 포괄적으로 다루며, 실제 소프트웨어 개발에 즉시 활용할 만큼 매우 실용적인 기술을 보여준다는 점이다. 조의 책은 동시성을 다루는 원시 코드(native code)나 관리되는 코드(managed code)의 윈도우 애플리케이션을 만드는 모든 사람이 '반드시' 소장해야 하는 필독서다.
스티브 테이세리아(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, 메모리 구조 인식(특히 윈도우 비스타에 추가된 것)의 지속적인 성능 개선을 통해 윈도우는 하드웨어 동시성의 사용을 극대화하는 운영체제로 발전해왔다. 이 책은 이와 같은 영역을 모두 다룬다. 애플리케이션에 멀티스레드를 도입하기 시작할 때, 깔끔한 아키텍처와 설계는 소프트웨어의 복잡성을 줄이고 유지 보수를 개선하는 데 대단히 중요하다. 이 책에서는 플랫폼의 성능뿐만 아니라 최근에 만들어진 최고의 예제에도 역점을 둔다. 조는 이 책을 통해 메커니즘과 더불어 최고의 예제를 소개하는 대단한 일을 했다.
멀티코어는 이미 만든 애플리케이션에 개선된 성능을 제공한다. 그러나 컴퓨터가 사람들을 위해 무엇을 할 수 있어야만 하는가에 대해 완전히 다르게 생각할 기회도 준다. 컴퓨터 성능의 지속적인 성장은 사람들에게 더욱 흥미롭고 도움이 될 수 있는 애플리케이션을 질적으로 바꿔 놓을 것이며, 이전에는 전혀 불가능했던 새로운 일도 할 수 있을 것이다. 이와 같은 진화를 바탕으로 소프트웨어는 사람이 컴퓨터와 더욱 개인적이고 인간적으로 상호 작용할 수 있는 방법을 열어 줄 것이다. 그러므로 이 책을 즐기기 바란다. 이 책은 윈도우 플랫폼에서 동시성과 멀티코어를 인식하는 소프트웨어를 작성하는 데 첫발을 내딛도록 안내할 것이다.
크레이그 먼디(Craig Mundie) (마이크로소프트 연구?전략 최고 책임자)