사실상 책에서는 Thread를 대상으로 Pool을 설명한다. Process를 Pool에 담아서 사용하는 경우가 흔하지 않은 것 같다. 그래서 뒤에 따르는 설명들은 Thread를 기준으로 작성하였습니다.
어쨋든, 병렬 처리 프로그램을 구현하기 위해서는 대표적으로 동기화(Synchronization), 교착 상태(Daedlock)와 같은 어려운 주제를 다루어야 하며, 이 뿐만 아니라 테스크를 식별하고, 쓰레드 간의 균형을 맞추는 등 여러 과제 또한 처리해야 한다. Pool은 이러한 어려움들을 처리하기 위한 여러 접근법 중 하나이다. (책에서는 Thread Pools를 비롯한 OpemMP, Grand Central Dispatch를 나열하고 있다.)
Pool의 기본 개념은 미리 생성된 일정 수의 Thread가 테스크를 기다리는 공간입니다. Thread들은 Process가 시작되는 시점에 생성되어 Pool에 담겨집니다. (웹 서버를 예로 들어)서버가 요청(Request)을 받으면 사용가능한 Thread를 꺼내와서 해당 Thread에 요청을 할당하고, 작업이 끝나면 다시 Pool에 되돌려 놓습니다. 이용가능한 Thread가 없을 경우에는 다른 Thread의 작업이 끝나 Pool에 돌아올 때까지 기다립니다.
이러한 Pool을 이용하면 다음 3가지의 이점이 있습니다.