Top

[멀티코어를 100% 활용하는]
자바 병렬 프로그래밍

  • 원서명Java Concurrency in Practice (ISBN 9780321349606)
  • 지은이브라이언 게츠, 더그 리, 팀 피얼스, 조셉 보우비어, 데이빗 홈즈, 조슈아 블로쉬
  • 옮긴이강철구
  • ISBN : 9788960770485
  • 35,000원
  • 2008년 07월 30일 펴냄
  • 페이퍼백 | 520쪽 | 188*250mm

책 소개

아무도 알려주지 않았던 자바 멀티스레드 프로그램에 대한 설계와 구현 노하우를 배운다. 멀쩡한 코드에서 왜 오류가 발생하는지, 오류를 어떻게 해결하고 성능을 높일 수 있는지 속 시원하게 파헤쳐 보자.


[ 책 소개 ]

스레드는 자바 플랫폼에서 가장 기본적으로 제공되는 기능 중 하나다. 멀티코어 프로세서가 대중화되면서 고성능 애플리케이션을 작성할 때 병렬 처리 능력을 효과적으로 활용하는 일의 중요성이 점차 부각되고 있다. 자바 SE 5와 6은 JVM 수준에서 뛰어난 성능과 높은 확장성을 함께 확보할 수 있도록 지원하고 다양한 종류의 라이브러리를 제공하고 있어 병렬 프로그램을 작성하고자 할 때 큰 짐을 덜어준다. 이같은 기능을 자바에 추가한 핵심 인력이 직접 집필한 이 책에서는, 병렬 처리 관련 기능에 어떤 것이 있고 어떻게 사용하는지에 대한 방법뿐 아니라, 그 내부에 숨어 있는 디자인 패턴과 그 패턴을 사용한 원론적인 이유도 함께 소개한다.

멀티스레드 프로그램을 작성하고 테스트하고 디버깅하는 일은 여전히 굉장히 어려운 작업이다. 병렬 처리 프로그램이 올바르게 동작하는 것처럼 보일 정도로 만들기는 쉽지만, 실서버에 적용하고 부하가 걸리는 시점이 되면 어김없이 오류가 발생한다. 이 책을 읽은 독자는 이론적인 기반과 함께 안정적이고 확장성 높고 유지보수가 간편한 병렬 처리 프로그램을 작성하는 방법을 배울 수 있다. 이 책에서 병렬 처리 API와 그 구조에 어떤 것이 있는지 뿐만 아니라 설계상의 규칙, 디자인 패턴, 그리고 병렬 처리 프로그램을 작성하는 개발자가 갖춰야 할 자세까지 익힘으로써, 올바르게 동작하면서 동시에 훌륭한 성능을 지닌 병렬 처리 프로그램을 작성할 수 있다.


[ 이 책에서 다루는 내용 ]

■ 병렬 처리와 스레드 안전성에 대한 기초
■ 스레드 안전한 클래스를 작성하는 기법
■ java.util.concurrent 패키지에 들어 있는 라이브러리 클래스 활용법
■ 성능 최적화를 위해 취해야 할 방법
■ 병렬 처리 프로그램 테스트 방법
■ 단일 연산 변수, 넌블로킹 알고리즘, 자바 메모리 모델과 같은 고급 주제


[ 이 책의 구성 ]

[기본 원리]
1부(2장~5장)는 병렬 프로그래밍과 스레드 안전성에 대한 기본 개념을 설명하고, 자바 클래스 라이브러리에서 제공하는 스레드 안전한 클래스를 어떻게 활용해야 하는지를 소개한다. 1부에서 소개한 여러 규칙 가운데 가장 중요한 부분은 "요약" 부분에 정리해놓았다.

[병렬 프로그램 구조 잡기]
2부(6장~9장)에서는 스레드를 어떻게 사용하면 병렬 애플리케이션의 성능과 응답성을 높일 수 있는지에 대한 내용을 다룬다.

[활동성, 성능, 테스트]
3부(10장~12장)는 개발자가 실제 하고자 했던 기능을 병렬 프로그램이 제대로 처리하는지를 확인하는 방법과 함께 적당한 시간 이내에 원하는 기능을 처리할 수 있는지 여부도 확인할 수 있는 방법을 살펴본다.

[고급]
4부(13장~16장)는 명시적인 락, 단일 연산 변수, 넌블로킹 알고리즘, 입맛에 맞는 동기화 클래스를 작성하는 방법 등 어느 정도 경험을 쌓은 개발자가 관심을 가질 만한 고급 주제에 대해 살펴본다.

저자/역자 소개

[ 저자 소개 ]

저자진은 자바 커뮤니티 프로세스(Java Community Process)의 JSR-166 전문가 그룹에 속해있으며, JCP 전문가 그룹에서도 활동하고 있다. 브라이언 게츠는 IT 분야에서 20여 년간 활동한 경험을 바탕으로 소프트웨어 컨설팅을 하고 있으며, 자바 개발과 관련해 75개 이상의 글을 기고한 바 있다. 팀 피얼스는 BoxPop.biz 사이트와 음반 시장, 공연 분야 등에서 다양한 일을 하고 있는 그야말로 최신 멀티코어 프로세서의 모델이다. 조셉 보우비어는 Apollo 컴퓨터 시절부터 IT 분야 일을 시작했으며 병렬 처리 프로그래밍에 꿈을 갖고 있는 자바 ME 전문가이다. 데이빗 홈즈는 『The Java Programming Language』의 공동 저자이며 썬마이크로시스템즈에서 일하고 있다. 조슈아 블로쉬는 구글의 최고 자바 아키텍트이며 『Effective Java』의 저자이면서 『Java Puzzlers』의 공동 저자이기도 하다. 더그 리는 『Concurrent Programming in Java』의 저자이며, SUNY Oswego(뉴욕 주립 대학)의 컴퓨터 공학 전공 교수이다.


[ 저자 서문 ]

이 책을 쓰는 시점에도 일반적인 데스크탑 시스템에서조차 멀티코어 프로세서는 이제 가격이 점차 낮아지며 대중화되어 가고 있다. 우연찮게 수많은 개발팀이 진행하는 프로젝트에서 스레드와 관련된 버그가 자꾸만 늘어나고 있다는 사실을 쉽게 알 수 있다. 넷빈즈(NetBeans) 개발 사이트에 최근에 올라온 글을 보면, 단 하나의 클래스를 놓고 스레드 관련 문제점을 수정하기 위해 14번이나 코드를 수정했다는 사실을 핵심 유지보수 담당자가 알아차린 사례도 있다. TheServerSide의 편집장을 지냈던 디온 앨메어는 (결국 스레드 관련 문제라고 결론이 나왔던 고통스러운 디버깅 작업을 끝낸 이후에) 대부분의 자바 프로그램이 “어쩌다보니 실수로 동작하는” 것일 뿐이며 스레드 관련 버그가 굉장히 자주 발생한다는 내용의 블로그 글을 올린 적도 있다.

스레드 관련 오류는 예측 가능한 상태로 스스로를 드러내는 법이 거의 없기 때문에 스레드를 사용하는 프로그램을 개발하고 테스트하고 디버그하는 일은 실제로 엄청나게 어려운 일이 될 수 있다. 게다가 문제점은 항상 최악의 시점, 즉 실제 사용 환경에서 부하가 많이 걸릴 때 주로 나타난다.

자바로 병렬 프로그램을 작성할 때 넘어야 할 가장 큰 산중의 하나는 플랫폼에서 제공하는 병렬 프로그래밍 기법과 개발자가 자신의 프로그램에서 병렬 프로그래밍 기법을 어떻게 사용하려 하는지 간에 큰 차이가 있다는 점이다. 자바 언어에서는 동기화나 조건부 대기와 같은 저수준의 도구(mechanism)를 제공하지만, 이런 도구를 사용해 애플리케이션 수준의 규칙이나 정책policy을 일관적으로 구현할 수 있어야 한다. 컴파일 잘 되고 실행도 잘 된다고 생각되는 프로그램은 쉽게 작성할 수 있겠지만, 이런 정책이 없다면 오류가 금세 나타나고야 만다. 병렬 프로그래밍을 다룬 훌륭한 책들이 많지만 대부분 설계 수준의 정책이나 패턴에 대해서 다루기보다는 저수준의 API에 집중하고 있어 이와 같은 정책의 중요성에 대처하는 면이 부족했다고 생각된다.

자바 5.0은 고수준의 컴포넌트와 저수준의 도구를 모두 제공하기 때문에 초보자나 전문가 모두가 병렬 프로그램을 쉽게 작성할 수 있게 되었다는 점에서 큰 발전을 이뤘다고 볼 수 있다. 이런 기능을 실제로 구현하는 데 참여했던 JCP 전문가 그룹에서 이 책 집필을 많이 도왔다. 추가된 기능과 동작하는 구조를 설명하는 것뿐만 아니라 그 기반이 되는 디자인 패턴과 함께 플랫폼 라이브러리에 추가되는 데 중요한 역할을 했던 예상 활용 시나리오도 함께 소개한다.
독자들이 이 책을 읽고 여러 가지 설계상의 규칙을 이해하고, 또한 자바 클래스나 애플리케이션이 올바르게 높은 성능으로 동작하도록 작성하는 과정이 더 쉽고 재미있는 일이라고 느끼길 바란다.

『자바 병렬 프로그래밍』을 즐겁게 읽고 유익하게 활용하길 기대한다.

브라이언 게츠(Brian Goetz)


[ 역자 소개 ]

강철구
아주대학교와 대학원에서 컴퓨터 비젼(영상 인식)을 전공했다. 검색 엔진, 웹, 분산 및 병렬, 소셜 네트워킹, 인공 지능 등의 키워드에 관심이 많다. 현재는 루씬을 이용한 검색 솔루션과 플랫폼을 개발하고 있으며, 관심사와 연결되는 새롭고 재미있는 비즈니스를 준비하고 있다. 에이콘출판사에서 출간한 『루씬 인 액션』(2005)과 『Ajax 인 액션』(2006)을 번역했다.


[ 역자 서문 ]

학교를 졸업하고 처음 회사에 취직한 이후에 담당했던 개발 업무 가운데 상당 부분은 자바로 서버 프로그램을 작성하는 일이었습니다. 수십에서 수백 대에 이르는 클라이언트를 대상으로 24시간 동작하는 서버를 작성하는 업무는 꽤나 재미있었습니다. 몇 날 며칠을 고생해서 만든 서버 프로그램이 어딘가 누군가의 서버에 설치되어 24시간 동작하면서 맡은 바 역할을 수행하고 있는 모습을 보면 건방지게도 자식이 제 할 일을 잘 할 때 부모가 받았을 느낌을 느낄 수 있었다고도 생각합니다.

하지만 어려운 병렬 처리 이론만 배웠지 멀티스레드를 사용해 프로그램하는 실습 위주의 교육을 받은 적이 없는지라, 단순하게 멀티스레드로만 동작하는 ‘자식 같은’ 프로그램이 알 수 없는 오류를 뿌리면서 곳곳에서 뻗어버리는 모습을 보면 참 안타까웠습니다 (오류라도 뿌리고 죽으면 그나마 다행입니다). 예전 버전의 자바는 운영체제마다 스레드의 동작 모습이 많이 달라서 어려운 점도 많았습니다. 운영체제마다 다른 스케줄링 문제를 해결하기 위해 전반적인 성능을 떨어뜨리면서 쓸모없는 I/O 구문을 추가하는 작업도 서슴치 않았습니다. 이후 스레드 풀을 적용해 서버의 안정성을 크게 높여주고, 스핀락(spin-lock)을 사용했던 부분에 wait-notify 구조를 적용해 CPU 부하를 크게 줄이기도 했습니다. 그러던 도중에 자바5.0이 발표되고, 병렬 프로그래밍을 위한 도구가 엄청나게 많이 제공되기 시작했습니다. 여기저기 찾아보며 만들고 안정화하느라 애를 먹었던 스레드 풀을 메소드 호출 한방으로 만들 수 있었으며, 훨씬 다양한 병렬 프로그래밍 기능을 더 안정적으로 제공받을 수 있게 되었죠.

이제 어느 프로그램에나 멀티스레드 구조를 활용하는 일은 거의 기본이 되어갑니다. 제가 요즘 맡은 개발 업무에서도 완전히 서로 다른 분야의 동떨어진 목표를 향해 개발하지만, 어느 곳 하나 스레드를 활용하지 않는 프로젝트가 없습니다. 서버에서는 한정된 컴퓨터 자원을 최대한 활용해 가장 효율적으로 서비스를 제공하고자 하고, 클라이언트 PC에서는 동적인 인터페이스와 함께 많은 정보를 실시간으로 얻고자 하죠. 단순히 언어와 관련된 문제는 아닙니다. 자바건 C#이건 PHP건 간에 항상 멀티스레드 환경을 생각해야 합니다. 직접 스레드를 만들지 않더라도 외부의 어디선가 반드시 스레드를 사용하는 부분이 있게 마련입니다.

이런 시점에 스레드를 활용한 병렬 처리에 대한 실제적인 예제와 패턴을 적용한 사용 예를 소개하는 너무나 반가운 책이 바로 『멀티코어를 100% 활용하는 자바 병렬 프로그래밍』입니다.

병렬 프로그램을 작성할 때 보통은 자바5.0부터 추가된 java.util.concurrent 패키지에 대한 여러 문서를 보면서 대충 이해하고 사용하곤 하지만, 『자바 병렬 프로그래밍』은 이런 기능을 충분히 이해한 상태에서 활용하도록 도와주고 있습니다. 아주 간단한 클래스를 담당해 개발하고 있다고 해도, 해당 클래스가 대규모 프로그램에서 기본적인 부분으로 널리 사용된다면 이 책에서 소개하는 기법을 적절히 적용해 전체 프로그램의 안전성을 확보하면서 성능을 크게 높일 수 있습니다. 그리고 병렬 프로그래밍에 대한 기초를 다지고 나면, 기존에 잊을 만하면 한 번씩 오류를 뱉어내면서 문제가 생기던 프로그램에 어떤 원인이 있을 수 있는지 쉽게 추적할 수도 있습니다. 『자바 병렬 프로그래밍』이 전문적인 이론서는 아니지만, 이론을 소홀하게 다루지도 않습니다. 또한 자바 언어를 기반으로 한다는 가정하에 쓰여진 책입니다만, 일반적인 병렬 처리 이론을 적용한 부분이 많으며 하드웨어나 시스템 구조와 관련된 부분도 적지 않기 때문에 다른 언어에도 쉽게 적용할 수 있는 내용이 많습니다.

한발 더 나아가 미래를 내다보는 개발자는 이미 단일 컴퓨터 내부에서의 병렬 처리를 넘어 여러 대의 컴퓨터에서 병렬로 동작하는 플랫폼을 찾고 있고, 이와 같은 분산 병렬 처리 플랫폼이 한창 인기를 얻는 요즘입니다. 이런 대규모 병렬 처리 플랫폼도 중요하긴 하지만, 그 안에서는 항상 단일 프로세스 내부에서 동작하는 여러 스레드가 안정적으로 실행되도록 하는 병렬 처리 기법이 적용되어 있음을 잊어서는 안될 것입니다.

재미있겠다고 생각은 했지만 내용이 어렵겠다고 지레 겁을 먹고 사양했던 번역 작업인데, 결국 이제야 끝마치게 되었습니다. 나름 서버 프로그래밍을 통해 경험을 많이 쌓았다고 생각했지만 책을 꼼꼼히 읽는 과정에서 배운 점이 더 많았습니다. 여러분 모두 이 책을 통해 자신있게 스레드를 널리 활용하고 결과물의 성능과 안전성을 높일 수 있게 되길 바랍니다.

참고로, 번역에 사용한 몇 가지 용어를 책 뒤편에 정리해뒀으니 참고하시기 바랍니다.

목차

목차
  • 1장 개요 ...... 29
    • 1.1 작업을 동시에 실행하는 일에 대한 (아주) 간략한 역사 ...... 29
    • 1.2 스레드의 이점 ...... 31
    • 1.3 스레드 사용의 위험성 ...... 34
    • 1.4 스레드는 어디에나 ...... 39
  • 1부 기본 원리 ...... 43
  • 2장 스레드 안전성 ...... 45
    • 2.1 스레드 안전성이란? ...... 47
    • 2.2 단일 연산 ...... 50
    • 2.3 락 ...... 55
    • 2.4 락으로 상태 보호하기 ...... 60
    • 2.5 활동성과 성능 ...... 62
  • 3장 객체 공유 ...... 67
    • 3.1 가시성 ...... 67
    • 3.2 공개와 유출 ...... 75
    • 3.3 스레드 한정 ...... 80
    • 3.4 불변성 ...... 85
    • 3.5 안전 공개 ...... 90
  • 4장 객체 구성 ...... 97
    • 4.1 스레드 안전한 클래스 설계 ...... 97
    • 4.2 인스턴스 한정 ...... 103
    • 4.3 스레드 안전성 위임 ...... 108
    • 4.4 스레드 안전하게 구현된 클래스에 기능 추가 ...... 119
    • 4.5 동기화 정책 문서화 하기 ...... 124
  • 5장 구성 단위 ...... 129
    • 5.1 동기화된 컬렉션 클래스 ...... 129
    • 5.2 병렬 컬렉션 ...... 137
    • 5.3 블로킹 큐와 프로듀서-컨슈머 패턴 ...... 142
    • 5.4 블로킹 메소드, 인터럽터블 메소드 ...... 150
    • 5.5 동기화 클래스 ...... 152
    • 5.6 효율적이고 확장성 있는 결과 캐시 구현 ...... 162
  • 2부 병렬 프로그램 구조 잡기 ...... 173
  • 6장 작업 실행 ...... 175
    • 6.1 스레드에서 작업 실행 ...... 175
    • 6.2 Executor 프레임웍 ...... 180
    • 6.3 병렬로 처리할 만한 작업 ...... 190
  • 7장 중단 및 종료 ...... 205
    • 7.1 작업 중단 ...... 206
    • 7.2 스레드 기반 서비스 중단 ...... 226
    • 7.3 비정상적인 스레드 종료 상황 처리 ...... 240
    • 7.4 JVM 종료 ...... 245
  • 8장 스레드 풀 활용 ...... 251
    • 8.1 작업과 실행 정책 간의 보이지 않는 연결 관계 ...... 251
    • 8.2 스레드 풀 크기 조절 ...... 255
    • 8.3 ThreadPoolExecutor 설정 ...... 257
    • 8.4 ThreadPoolExecutor 상속 ...... 268
    • 8.5 재귀 함수 병렬화 ...... 270
  • 9장 GUI 애플리케이션 ...... 283
    • 9.1 GUI는 왜 단일 스레드로 동작하는가? ...... 283
    • 9.2 짧게 실행되는 GUI 작업 ...... 288
    • 9.3 장시간 실행되는 GUI 작업 ...... 291
    • 9.4 데이터 공유 모델 ...... 298
    • 9.5 다른 형태의 단일 스레드 서브시스템 ...... 301
  • 3부 활동성, 성능, 테스트 ...... 303
  • 10장 활동성을 최대로 높이기 ...... 305
    • 10.1 데드락 ...... 305
    • 10.2 데드락 방지 및 원인 추적 ...... 319
    • 10.3 그 밖의 활동성 문제점 ...... 323
  • 11장 성능, 확장성 ...... 327
    • 11.1 성능에 대해 ...... 327
    • 11.2 암달의 법칙 ...... 333
    • 11.3 스레드와 비용 ...... 339
    • 11.4 락 경쟁 줄이기 ...... 343
    • 11.5 예제: Map 객체의 성능 분석 ...... 357
  • 12장 병렬 프로그램 테스트 ...... 363
    • 12.1 정확성 테스트 ...... 365
    • 12.2 성능 테스트 ...... 382
    • 12.3 성능 측정의 함정 피하기 ...... 390
    • 12.4 보조적인 테스트 방법 ...... 396
  • 4부 고급 주제 ...... 403
  • 13장 명시적인 락 ...... 405
    • 13.1 Lock과 ReentrantLock ...... 405
    • 13.2 성능에 대한 고려 사항 ...... 412
    • 13.3 공정성 ...... 413
    • 13.4 synchronized 또는 ReentrantLock 선택 ...... 416
    • 13.5 읽기-쓰기 락 ...... 417
  • 14장 동기화 클래스 구현 ...... 423
    • 14.1 상태 종속성 관리 ...... 423
    • 14.2 조건 큐 활용 ...... 433
    • 14.3 명시적인 조건 객체 ...... 444
    • 14.4 동기화 클래스의 내부 구조 ...... 447
    • 14.5 AbstractQueuedSynchronizer ...... 450
    • 14.6 java.util.concurrent 패키지의 동기화 클래스에서 AQS 활용 모습 ...... 455
  • 15장 단일 연산 변수와 넌블로킹 동기화 ...... 461
    • 15.1 락의 단점 ...... 462
    • 15.2 병렬 연산을 위한 하드웨어적인 지원 ...... 464
    • 15.3 단일 연산 변수 클래스 ...... 469
    • 15.4 넌블로킹 알고리즘 ...... 476
  • 16장 자바 메모리 모델 ...... 487
    • 16.1 자바 메모리 모델은 무엇이며, 왜 사용해야 하는가? ...... 487
    • 16.2 안전한 공개 ...... 497
    • 16.3 초기화 안전성 ...... 504
  • 부록 A 병렬 프로그램을 위한 어노테이션 ...... 507
    • A.1 클래스 어노테이션 ...... 507

관련 블로그 글

(신간) '자바 병렬 프로그래밍'의 비급 전격 공개!
더우시죠? 달콤하고도 유쾌한 "한 여름 밤의 꿈"을 꾸기엔 방해꾼 열대야의 공작이 너무도 맹렬합니다. 저는 추위에 취약한 동물이라 "더위쯤이야~" 싶었는데, 그래도 덥긴 덥습니다. -0-; 자, 무더위를 날려줄 시원한 신간 소식 알려드립니다. 아마 지금쯤 블로그 히어로즈 트랙백 이벤트 당첨자 명단을 눈이 빠지게 기다리실 분들 많을 텐데요. 일단 신간 소식부터 알려드리고 올려드릴 테니 좀만 기다리세요.~
사용자 삽입 이미지
 『멀티코어를 100% 활용하는 자바 병렬 프로그래밍
브라이언 게츠, 더그 리 지음 | 강철구 옮김
528쪽 | 2008년 7월 30일 출간 예정 | 35,000원

사람들은 여러 가지 타입이 있습니다. 한 가지 일에만 몰두하면서 순차적으로 일을 처리하는 사람. 혹은 몇 가지 일을 동시에 처리하는 사람. 전자가 보기에 후자인 사람은 정신 없고 "산만"하기 그지 없다는 표현을 쓰기도 하고, 후자가 전자를 바라 본다면 답답해서 속 터지는 사람같다는 생각을 하기도 하죠. 흠, 저야 뭐.

하지만 아무리 집중도가 높고 순차적인 일처리를 하는 사람이라고 하더라도 알게 모르게 적어도 몇 가지 일은 동시에 하게 마련입니다. 일상생활에서도 밥이 다 되기를 기다렸다가 반찬을 만들기 시작하고, 커피물이 끓는 동안 옆에서 지켜보고 있는 사람은 없기에 어느 정도는 우리 모두 멀티스레딩을 하고 있다고 보면 되죠. 좀 단순하긴 하지만요. 하지만.... 우리가 일상에서 겪는 10가지 일 정도라면 뭐 병렬 프로그래밍 따위 신경쓰지 않아도 처리할 수 있을 만큼 여러분의 두뇌는 이미 뛰어나리라고 믿습니다. 그러나 수천개의 연관 관계를 고려하고 작업의 우선순위와 병렬 처리를 고려하고 오만가지의 유스케이스와 DB 공유에 신경써야 한다면, 아... 그냥 집에 가서 발씻고 자거나 뻗어버리거나 삽질을 동원하거나 몇 가지 선택사항은 있긴 할 겁니다.

서버 프로그램을 작성하는 개발자들은 누구나 "병렬 프로그래밍"이라는 이야기를 들으면 혀를 내두르거나 고개를 돌리곤 한다는 이야기를 많이 들었습니다. 멀티 CPU, 멀티코어를 기반으로 다양한 데이터를 공유해야 하는 서버 프로그래밍에서 작업간의 동기화를 맞추지 못하면 야금야금 데이터를 갉아먹기 시작합니다.

물론 요즘 구입하는 서버 소프트웨어에서는 이미 이런 병렬 처리 기능이 보강되어있고, 수천만원을 호가하는 제품을 구입하면 어느 정도 효율을 기대할 수는 있긴 합니다. 하지만 분명 한계가 있습니다. 프로그램은 어쨌든 사람이 짜야 하니까요. 똑같은 기능을 하는 프로그램을 짜는 프로그래머가 여러 명 있다고 합시다. 대강 이런 서버 소프트웨어의 성능을 고려해 프로그램을 짜는 사람과, 『멀티코어를 100% 활용하는 자바 병렬 프로그래밍』을 읽고 이해한 후 여유있게 커피 한 잔 마시면서 "몰려드는 사용자를 감당할 수 있는 안정적이고도 성능이 높으며 오류가 적은 프로그램을, 그것도 아주 짧은 시간"에 만들어내는 개발자가 있다면, 어느쪽의 몸값이 올라갈지는 자명한 일입니다.

이 책에는 자바 5.0과 6.0을 기반으로 한 서블릿 예제와 웹 서버 예제, 서버 프로그램 예제 등 생생한 소스코드가 가득합니다. 서버 프로그래머, 자바 개발자는 물론이고 유지보수팀에서도 꼭 읽어야 할 내용이 꽉 차있습니다.

(지금은 마이크로소프트를 떠난) 빌게이츠 회장은 2007년 MVP 서밋에서 개발자를 대상으로 하드웨어 발전에 따른 소프트웨어 성장 기회를 다음과 같이 논평했습니다. 원문은 여기서 읽으실 수 있습니다(글을 읽으시려면 사이트를 구독하셔야 합니다).

마이크로소프트의 빌 게이츠 회장은 IT 산업이 멀티코어 프로세서를 효율적으로 프로그램하는 방법을 스스로 개발해야 한다고 언급했다.

게이츠 회장은 하드웨어 업계가 더 많은 트랜지스터를 사용함으로써 부분적으로 병렬 프로그래밍을 처리하고 있다고 설명했다. 그는 하드웨어가 지속적인 성장을 보인데 비해 소프트웨어의 성장 기회는 그리 크지 않았다고 말했다.

“하드웨어 산업은 계속해서 발전을 거듭하고 있다. 무어의 법칙에 따른 트랜지스터 수의 증가가 실상을 증명해주고 있다. 프로세서의 능력을 배가 시키는 것은 끝없이 계속될 것이다. 클록 속도를 높이는 대신에 이제는 더 많은 프로세서를 사용하고 있다”고 게이츠는 말했다.

흠. 세상사가 논리를 구성해서 순차적으로 일을 처리해야하는 일만 가득하다면 얼마나 좋을까요. 지금 제게 닥쳐있는 백만 가지 일을 병렬로 술술 풀어줄 그런 책은 어디 없을지.... 이 책에 대한 글을 쓰다보니 제게도 정말 간절하네요. 그러니 프로그래머라면 "앗, 이거다"라고 반가워할 만할 책이라는 얘기가 가슴에 팍 와닿습니다. 이 책 읽으시고 몸값 높이게 되시면 저희 에이콘출판사에 맛있는 피자 한 판이라도 꼭(!) 보내주세요. 주소는 저희 사이트를 잘 뒤져보시면 나와 있습니다. ^^/

이 책은 지금 YES24, 교보문고, 강컴, 인터파크, 알라딘에서 절찬 예약 판매중입니다.

CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

 1쇄 오류/오탈자 

[ p37 예제 1.2 5행 ]
return value → return value++;

[ p476 5-8행 ]
특정 스레드에서 ~ 알고리즘이라고 한다.
→ 특정 스레드에서 작업이 실패하거나 또는 대기 상태에 들어가는 경우에, 다른 어떤 스레드라도 그로 인해 실패하거나 대기 상태에 들어가지 않는 알고리즘을 넌블로킹(non-blocking) 알고리즘이라고 한다.

 2쇄 오류/오탈자 

[ p194 예제 6.11 아래로 5행 ]
Callabl → Callable