프로세스와 스레드를 이해하기 전에 메모리 구조에대해 한 번 이해하고 오는 것을 추천한다.(아래 링크 클릭)
1. 프로세스(Process)
① 프로세스란?
- 이해를 돕기 위해 예시를 들겠다. 우리는 컴퓨터를 하면서 두 가지 이상의 프로그램을 자주 사용한다. 이때 CPU에서는 시분할로 굉장히 짧게 반복하면서 실행한다.(아래 컨텍스트 스위칭 이미지 참고)
② 컨텍스트 스위칭
- 두 개의 프로그램을 실행할 때 2개의 프로세스가 실행되는 경우 하나가 실행되면 다른 하나는 준비 상태가 된다. 이를 '컨텍스트 스위칭' 이라고 한다. 그런데 이렇게 되면 비효율적인 부분이 있는데 뭐냐하면 자원을 공유하지 않는 것이다.
③ 자원을 공유하지 않는다는 것은 뭘까?
- 만약 회의실에서 두팀이 번갈아가면서 회의를 하는데 회의용 '모니터', '마우스', '리모컨' 등을 공유하지 않고 가져가는 것과 같다.
- 그렇기 때문에 경우에 따라 이런 치명적인 단점을 커버할 수 있는 '경량화된 프로세스'인 스레드가 필요한 것이다.
2. 스레드(Thread)
① 스레드란?
- 프로세스내에 '작은 프로세스'이다. 프로세스내의 자원(메모리)를 공유하기 때문에 효율적이며 '캐싱 적중률'이 높다. 두 개의 프로그램이 실행될 때 공통으로 사용할 만한 것들을 공유하는 것이다.
3. 처리방식
① 멀티 프로세스(Multi-process)
- 멀티 프로세스는 프로그램을 실행할 때 독립적인 메모리를 확보한 '자식 프로세스'를 fork하여 처리하는 것이다.
② 멀티 스레드(Multi-thread)
- 멀티 스레드는 프로세스내에서 여러 스레드로 나뉘어서 실행하는 것이다.
③ 멀티 프로세스와 멀티 스레드의 차이
멀티 프로세스 | 멀티 스레드 |
메모리 영역이 독립적 | 메모리를 공유 |
IPC를 사용한 통신 | 자원 공유로 통신 비용 절감 |
자원 소모적, 개별 메모리 차지 | 자원 공유로 메모리가 효율적 |
컨텍스트 스위칭 비용이 큼 | 컨텍스트 스위칭 비용이 적음 |
동기화 작업이 필요하지 않음 | 공유 자원 관리 |
- 멀티 프로세스는 독립적이기 때문에 IPC를 사용한 통신이 필요하다.( 공유하기 위함 )
반면에 독립적이어서 동기화 작업이 필요하지 않다.
- 멀티 스레드는 자원이 공유되어 동기화에 신경을 써야한다. ( 실행 시 같은 업무를 중복해서 작업할 수 있음 )
공유가 빨라서 컨텍스트 스위칭 비용이 적다.
'자기계발 > Computer Science' 카테고리의 다른 글
CS ] 오버로딩(OverLoading)과 오버라이딩(Overriding)의 차이 (0) | 2022.08.22 |
---|---|
CS ] REST API 개념 정리 (0) | 2022.08.11 |
CS개념잡기 1탄 ] 메모리의 구조 및 프로그램 실행 과정 알기 (0) | 2021.12.21 |
CS ] MVC패턴 이란? / MVC패턴 이해하기 (0) | 2021.09.12 |
CS ] 인스턴스(instance)를 쉽고 간단하게 이해하기 (0) | 2021.09.10 |