Goal
- 프로세스와 쓰레드를 이해한다.
프로세스(Process)
- 운영체제로부터 할당받은 하나의 단위
- 메모리 영역에서 실행되고 있는 프로그램의 인스턴스
- 프로세스에는 Code, Data, Stack, Heap 영역이 존재한다.
- 프로세스에는 최소 한 개 이상의 쓰레드가 존재한다.
- 다른 프로세스의 데이터에 접근할 수 없다.
쓰레드(Thread)
- 프로세스내에서 실행되는 단위를 나타낸다
- 프로세스내에 쓰레드는 여러 개가 존재할 수 있다.
- 쓰레드에는 오직 Stack 영역이 할당되고 다른 쓰레드와 프로세스 내의 다른 자원들을 공유할 수 있다.
멀티 프로세스와 멀티 쓰레드
- 멀티 프로세스란 하나의 응용 프로그램을 실행할 때 여러 개의 프로세스가 하나의 작업을 처리하는 방식이다.
- 장점
- 한 개의 프로세스에 오류가 발생해도 프로그램이 동작한다.
- 단점
- 오버헤드가 발생할 가능성이 높다. 여러 개의 프로세스가 번갈아 작업을 하기 때문에 Context Switching이 발생하며 과정 속에서 메모리 초기화 등의 생각보다 비용이 많이 드는 작업을 하기 때문에 오버헤드가 발생한다.
- 장점
- 멀티 쓰레드란 프로세스내에서 여러 개의 쓰레드가 하나의 작업을 처리하는 방식이다.
- 장점
- 오버헤드가 적다. 쓰레드 단위로 작업을 하기 때문에 Context Switching이 발생하는 경우가 적다.
- 멀티 프로세스처럼 프로세스를 생성하여 사용하는 작업 소모를 줄일 수 있다.
- 단점
- 동기화 작업이 필요하다.
- 쓰레드에 오류가 발생하면 다른 쓰레드에 영향을 줄 수 있다.
- 장점
문맥 교환(Context Switching)
- 실행 중인 프로그램의 여러 개의 프로세스 중 하나의 프로세스가 대기 상태에 있다가 다시 사용 상태로 복귀하는데 걸리는 시간(비용)을 의미한다.
동시성과 병렬성
- 동시성이란 한 개의 코어에서 두 개의 쓰레드가 동시에 작업을 처리하는 것을 의미한다. 한 개의 코어에서는 하나의 작업밖에 하지 못하므로 실제로는 두 개의 쓰레드가 서로 Context Switching을 하면서 작업을 처리하게 된다.
- 싱글 코어에서 멀티쓰레드 방식
- 병렬성이란 여러 개의 코어에서 동시에 작업을 처리하는 것을 의미한다. 이 때 코어들은 작업은 동시에 시작해야한다.
동시성 프로그래밍은 여러 쓰레드에서 공유하고 있는 자원에 접근이 가능하기 때문에 공유 자원에 대해서 경쟁 상태나 교착 상태가 발생할 수 있다.
경쟁 상태
- 동시에 인풋이나 조작에 의해서 공유 자원의 결과값에 영향을 미칠 수 있는 상태를 의미한다. 이는 공유 자원의 결과값을 보장할 수 없는 상태를 나타낸다.
교착 상태
- 여러 개의 프로세스, 쓰레드가 서로 필요한 공유 자원을 미리 점유하고 필요한 다른 자원(다른 프로세스, 쓰레드가 미리 점유한 자원)을 사용하기 위해서 계속 대기 중인 상태를 의미한다.
뮤텍스(Mutext)
- 동시 프로그래밍에서 공유 불가능한 자원을 동시에 사용하지 못하게하는 알고리즘
- Object 객체(key)가 존재하고 공유 자원을 사용하기 위해서는 key를 소유한 프로세스, 쓰레드만 공유자원을 사용할 수 있는 상호배제 기법이다.
세마포어(Semaphore)
- 공유 자원을 지정한 수 만큼 사용할 수 있도록 통제하는 방법
'Programming > Basic' 카테고리의 다른 글
메모리 구조 (0) | 2022.07.03 |
---|---|
가비지 컬렉션(Garbage Collection, GC) (0) | 2022.07.02 |
SOLID 원칙 (1) (0) | 2021.05.11 |
객체지향의 원리 - 캡슐화 (0) | 2021.05.07 |
객체지향의 원리 - 추상화 (0) | 2021.05.03 |
댓글