Concurrency나 Parallel은 모두 ‘동시에’ 어떤 일을 처리하지만, 이 ‘동시에’를 구현하는 방식이 크게 차이가 남
일단 Concurrency와 Parallel 방식의 차이점은 프로세서(혹은 프로세스)의 개수
Concurrency에서 프로세서는 하나이지만, Parallel은 프로세서가 여러 개임
그래서 Parallel은 여러 작업을 각각의 프로세서에서 한 개씩 실행시켜버리면 됨
그러나 Concurrency는 프로세서가 하나이기 때문에 여러 작업을 동일한 시간대에 실행을 시킬 수 없음. 결국 운영체제가 프로세서를 선점하여 각 작업에 프로세서 자원을 할당해야 함
Parallel은 운영체제의 노고는 적지만, 프로그래머가 작업을 나눠 프로세스를 실행시켜야 함. Parallel이 어려운 이유가 바로 이것 때문임. 작업을 잘 나누려면 지식과 경험이 있어야 하니까
Thread 클래스를 이용하는 건 Concurrency 특징을 이용하여 작업을 처리하는 것임
만약 ‘병렬적으로’ 작업을 처리하고 싶다면 Process 클래스를 사용해야 함
응용 수준에서 Process와 Thread는 사실상 큰 차이가 없으니, 관리적인 측면에서 Process 보다 Thread를 이용하는 것이 더 권장됨. 왜냐하면 Process 안에 Thread가 있기 때문으로 Process는 원활하게 제거되지 않으면 Zombie가 되어 불필요하게 PID 등의 시스템 자원을 잡아 먹는 반면, Thread는 Process가 사라지기 때문에 불필요하게 시스템 자원을 잡아 먹을 일이 거의 없음.
물론 빅데이터 분석과 같이 여러 프로세서의 자원을 동시에 이용해서 더 신속하게 데이터 처리를 마치고 싶다면 Thread가 아니라 Process를 무조건 사용해야 함. 아니, 사용할 수 밖에 없음