프로그램 설계 시 멀티 프로세스와 멀티 쓰레드에 대한 고민을 하는 사람들이 많다.
멀티 쓰레드는 Light weight process로 불리며 공유 자원들은 두고 별도의 자원만 사용가능 하기 때문에,
멀티 프로세스에 대해 가볍다는 것은 모두 알고 있는 사실일 것이다.
컨텍스트 스위칭 같은 경우에도 1 core(CPU)에서의 문제지,
N개의 core를 사용하는 서버에서의 문제는 크게 영향을 받지 않는다(사실 속도는 코드에서 영향이 더 크다).
멀티 프로세스와 멀티 쓰레드는 의외의 차이점을 가지고 있다
1. scale out
멀티 프로세스로 프로그램 작성 시 scale out이 가능해 진다.
Thread를 많이 돌려도 그건 한 서버 내에서 문제이지, 타 서버와 통신 시 문제가 생긴다.
서버를 1대만 사용할 것이라고 보장되었을 경우 Thread로 프로그램을 작성하여도 된다.
그러나 그렇지 않을 경우 프로그램 구조 수정이 필요할 수 있다.
2. 프로세스 갯수 문제
프로세스가 시스템의 Memory를 모두 사용할 경우 Linux의 OOM Killer가 우선순위가 가장 낮은 프로세스 중,
메모리 반환 기대치가 가장 높은 프로세스 하나를 종료 시킨다.
이 때 Thread의 경우 하나의 프로세스가 종료 되면 자식 Thread까지 종료 된다.
그러나 멀티 프로세스(ex python)의 경우 한 프로세스만 종료 될 경우,
나머지 프로세스가 메모리를 추가적으로 요구할 수 있다.
이 문제는 서버 다운을 야기 시킬 수 있다.
그래서 일반적으로 타 서버와 통신이 필요할 때는 멀티 프로세스,
서버 1대 내부에서 병렬처리 시 Thread를 사용하면 문제를 적게 일으킨다.
출처 - 없음
'OS' 카테고리의 다른 글
LILO (bootloader) (0) | 2024.11.10 |
---|---|
/proc/PID (0) | 2023.03.24 |
/etc/fstab을 이용한 자동 mount (0) | 2023.03.14 |
CentOS 7.9 방화벽 설정 (0) | 2023.03.08 |
CentOS 7.9 네트워크 설정 (0) | 2023.03.07 |