멀티 스레드 방식에서는 손님 한 명이 올 때마다 점원도 한 명씩 붙어 주문을 받고 서빙합니다. 언뜻 보면 싱글 스레드보다 좋은 방법처럼 보이지만, 장단점이 있습니다. 일단 손님 한 명당 점원도 한 명이면 서빙 자체는 걱정이 없습니다. 점원 한 명에게 문제가 생겨도 다른 점원으로 대체하면 되기 때문입니다. 하지만 손님의 수가 늘어날수록 점원의 수도 늘어납니다. 손님 수가 줄어들었을 때 일을 하지 않고 노는 점원이 있다는 것도 문제가 됩니다. 점원을 새로 고용하거나 기존 직원을 해고하는 데는 비용이 발생합니다.
▲ 그림 1-14 멀티 스레드, 블로킹
그렇다면 점원 여러 명(멀티 스레드)이 모두 논블로킹 방식으로 주문을 받으면 더 좋지 않을까 하는 의문이 들 수 있습니다. 실제로 그렇습니다. 다만, 멀티 스레드 방식으로 프로그래밍하는 것은 상당히 어려우므로 멀티 프로세싱 방식을 대신 사용합니다. I/O 요청에는 멀티 프로세싱이 더 효율적이기도 합니다.
▼ 표 1-1 멀티 스레딩과 멀티 프로세싱 비교
멀티 스레딩 |
멀티 프로세싱 |
하나의 프로세스 안에서 여러 개의 스레드 사용 |
여러 개의 프로세스 사용 |
CPU 작업이 많이 사용될 때 사용 |
I/O 요청이 많을 때 사용 |
프로그래밍이 어려움 |
비교적 쉬움 |
I/O 작업을 처리할 때는 멀티 스레딩보다 멀티 프로세싱이 효율적이므로 노드는 멀티 프로세싱을 많이 합니다. 4.5절의 cluster 모듈과 15.1.5절의 pm2 패키지에서 멀티 프로세싱을 가능하게 하는 방법을 알아봅니다. 멀티 스레딩을 하는 방법은 3.5.7절에서 알아봅니다.