노트
스레드 풀은 워커 스레드를 생성하고 관리하고 배정하는 역할을 한다. 이 역할을 잘못 수행하면 복잡해지고, 비용이 커질 수 있다. 스레드 풀은 스레드 수를 정적으로 둘 것인지, 동적으로 변화시킬 것인지, 그리고 작업에 스레드를 배정하고 실행하는 전략에 따라 여러 종류가 있다.
2장에서 다뤘던 패스워드 크랙과 같이 다중 스레드로 실행해야 하는 수많은 작업이 있다고 하자. 가능한 패스워드 후보 집합을 더 작게 나눠서 서로 다른 스레드에 배정하면 동시성의 효과를 볼 수 있다. 이 시나리오를 수행하려면 백그라운드에서 동작하며 작업을 만들어내는 주 스레드가 필요하다.
이렇게 백그라운드로 동작하는 주 스레드와 워커 스레드의 통신을 구현하려면 스레드 간의 연결처럼 동작하는 저장 수단이 필요하다. 이때 저장 수단은 작업이 생성된 순서를 우선하여 처리해야 한다. 할 일을 배정받지 않은 워커 스레드는 저장 수단에서 작업을 받아가야 한다.
스레드끼리 이러한 통신을 가능케 하려면 어떻게 해야 할까?