멀티 프로세스와 멀티 스레드
동시성 (Concurrent vs Parallel)
- Concurrent : 어떤 job 여러개가 동시에 처리된다.
- Parallel : 어떤 하나의 job을 쪼개서 여러 sub-job으로 나누고, 이를 물리적으로 분리된 구조에서 동시에 처리해서 완성하는 개념 (CPU의 core가 여러개)
- 예전에는 Parallelism 없이 즉 1코어 CPU로 Concurrency 처리가 필요했다. 그래서 싱글 프로세서로 재빠르게 프로세스를 전환해서 Concurrent 하게 동작하는 식으로 했ek.
컨텍스트 스위칭 (Context-Switching)
- CPU 코어를 다른 프로세스로 전환하기 위해 현재 프로세스의 상태 저장 및 다른 프로세스의 상태 복원을 수행하는 작업
- Context : CPU 가 프로세스를 실행하기 위한 정보. PCB(프로세스 컨트롤 블럭) 에 저장
- 컨텍스트 스위칭이 일어나면 커널이 이전 프로세스의 Context를 그 프로세스의 PCB에 저장하고 새롭게 실행할 프로세스의 저장된 Context를 불러오게 된다.
- Context-Switching 수행 중에는 CPU의 자원이 어떤 프로세스에 할당된 상태가 아니기 때문에 CPU가 아무 작업도 할 수 없다.
멀티 프로세스
- 여러개의 프로세스를 동시에 수행
- 참고 : 프로세스는 부모 - 자식간의 관계여도 자신만의 독립적인 메모리 영역을 가짐
멀티 프로세스의 통신 방법
- 독립적인 메모리 영역을 가지는 프로세스끼리도 통신하는 방법이 있다. 데이터를 교환하기 위해서 IPC(Inter-Process Communication) 메커니즘이 필요하다.
- IPC : 공유 메모리 (shared memory) 와 메시지 전달 (message passing) 의 두가지 모델이 있다.
- 공유 메모리 : 프로세스가 공유하는 메모리 영역이 설정, 각 프로세스는 공유 영역에서 데이터를 읽고 쓰는 방식으로 정보를 교환할 수 있다. 즉..! 서로 공유 가능한 메모리 영역을 지정하는 방법!
- 메시지 전달 : 프로세스 간 메시지를 교환하여 통신
멀티 프로세스의 장점
- 독립된 구조를 가지기 때문에 안정성이 높다.
- 하나의 프로세스가 비정상적으로 종료되어도, 자식 프로세스 이외의 다른 프로세스들은 영향 X
멀티 프로세스의 단점
- 독립된 메모리 영역을 갖고 있기 때문에 컨텍스트 스위칭을 위한 오버헤드가 발생
- 컨텍스트 스위칭이 빈번하게 일어나면 성능 저하 유발
멀티 스레드
- 한 프로세스 내에서 여러개의 스레드를 동시에 수행
멀티 스레드 예시
- 이미지 모음에서 사진 썸네일을 생성하는 프로그램은 별도의 스레드를 사용하여 각각의 개별 이미지에서 썸네일을 생성할 수 있다.
- 워드 프로세서는 그래픽을 표시하기 위한 스레드, 사용자의 키 입력에 응답하기 위한 스레드, 백그라운드에서 맞춤법 및 문법 검사를 수행하기 위한 스레드를 가질 수 있다.
멀티 스레드 장점
- 응답성이 좋아진다.
- 자원을 공유할 수 있다. 프로세스 끼리는 공유 메모리, 메시지 전달과 같은 방법으로 자원을 공유할 수 있다. 하지만 스레드는 기본적으로 자신이 속한 프로세스의 자원을 공유한다.
멀티 스레드 단점
- 스레드는 프로세스 내 자원을 공유하기 때문에 스레드 하나에서 오류가 발생하면 프로세스 내의 모든 스레드가 종료될 수 있다.
- 공유 자원에 대한 동기화 문제를 고려해야한다.