-
프로세스 vs 쓰레드CS 2020. 12. 13. 02:39
프로그램
- 어떤 작업을 위해 실행할 수 있는 명령어의 집합
- 저장 장치에 저장되어있지만 메모리에 올라가지 않은 정적인 상태
프로세스
- 운영체제로 부터 자원을 할당 받은 작업의 단위
- 실행되고 있는 동적인 상태의 프로그램
특징
- 각각 독립된 메모리 영역 (Code, Data, Stack, Heap)을 할당 받는다.
- 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있는다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 자원에 접근할 수 없다.
- 다른 프로세스의 자원에 접근하고 싶다면 프로세스간의 통신(IPC)를 사용해야 한다.
스레드
- 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
- 프로세스의 특정한 수행 경로
특징
- 스레드는 프로세스 내에서 stack만 따로 할당 받고 Code, Data, Heap의 영역은 공유한다.
- 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내의 스레드 끼리 공유하며 실행된다.
- 같은 프로세스 내에 있는 여러 스레드는 같은 힙 공간을 공유하지만 다른 프로세스 끼리의 메모리에는 직접 접근할 수 없다.
- 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만 힙 메모리는 서로 읽고 쓸 수 있다.
- 한 스레드가 프로세스의 자원을 변경하면 다른 이웃 스레드에서 즉시 변경 결과를 볼 수 있다.
멀티 프로세스 vs 멀티 스레드
멀티 프로세스
하나의 컴퓨터에 여러 CPU를 장착 -> 하나 이상의 프로세스들을 동시에 처리(병렬 처리)
장점 - 안정성이 높다 (독립된 구조이기 때문이다.)
단점 - 각각의 메모리 영역을 가지고 있어 작업량이 많을수록 오버헤드 발생, Context Swtiching 으로 인한 성능 저하
멀티스레드
장점
- 프로그램의 응답시간이 단축되고 시스템의 처리율이 향상된다.
- 시스템의 자원 소모량을 감소시킬 수 있다.
- 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.
- Context Switching 할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
- 스레드는 프로세스 내의 Stack영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어 응답시간이 빠르다.
단점
- 여러 개의 스레드 사용 할 경우 미묘한 시간차나 잘못된 변수를 공유함으로써 오류가 발생할 수 있다.
- 스레드간 통신할 경우 충돌 문제를 방지하기 위해 동기화 문제를 해결해야 한다.
- 프로그램 디버깅이 어렵다.
- 단일 프로세스 시스템에서는 효과를 기대하기 어렵다.
- 메모리 영역의 내용을 공유하기 때문에 한 스레드에서 오류가 발생하면 같은 프로세스 내의 다른 스레드가 모두 종료된다.
'CS' 카테고리의 다른 글
해싱(Hashing)? (0) 2020.12.22 세마포어? 데드락? (0) 2020.12.14 CPU 스케줄링 알고리즘 (0) 2020.12.12 트랜잭션 격리 수준? (0) 2020.12.11 객체지향 프로그래밍 (OOP) (1) 2020.12.09