Process
실행 중인 프로그램
- 사용자가 작성한 프로그램이 OS에 의해 필요한 자원을 할당받아 실행 중인 것
- 각각 독립된 메모리 영역(code, data, stack, heap)을 할당받음
- 프로세스 = 프로그램 + 프로세스 제어블록(PCB)
Thread
프로세스 내에서 실제로 작업을 수행하는 주체
- 모든 프로세스에는 1개 이상의 스레드가 존재한다.
- 2개 이상의 스레드를 가지는 프로세스 = 멀티스레드 프로세스
- 각 스레드는 stack만 따로 할당받고, code, data, heap은 한 프로세스 내에서 공유한다.
Multi Processing
하나의 응용 프로그램을 여러 개의 프로세스로 구성해서 각 프로세스가 하나의 작업을 처리하는 것
장점
- 한 프로세스에 문제가 생겨도 다른 프로세스로 영향이 가지 않는다.
단점
- Context Switching에서의 오버헤드
- 공유 메모리가 없어서 캐쉬의 모든 데이터를 초기화하고 다시 캐시 정보를 불러오는 등 무거운 작업이 진행되고 많은 시간이 소모된다.
- 프로세스간 통신 기법(Inter-Process Communication, IPC)이 어렵고 복잡하다.
Context Switching 문맥 교환
스레드가 교체될 때 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업
- CPU가 여러 프로세스를 돌아가면서 작업을 처리한다.
- 컴퓨터에서 동시에 처리할 수 있는 작업의 수 = CPU 코어의 수
- 코어수보다 많은 스레드가 실행되면 각 코어는 정해진 시간 동안 여러 작업을 번갈아가며 수행한다.
- 문맥 교환에 걸리는 시간이 커질수록 멀티 스레딩의 효율 저하
- 많은 양의 단순한 계산은 싱글 스레드가 더 효율적일수도 있다.
Multi Threading
하나의 응용 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하는 것
장점
- 프로세스를 생성하고 자원을 할당하는 시스템 콜이 줄어들어서 자원을 효율적으로 관리할 수 있다.
- 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 처리량과 처리 비용이 감소한다.
- 스레드 사이 작업량이 작아서 context switching이 빨라진다.
- 프로세스 내 공유 메모리 덕분에 스레드 간 통신 부담이 적고 프로그램 응답 시간이 단축된다.
단점
- 디버깅이 까다롭다.
- 단일 프로세스 시스템에서는 효과를 기대하기 어렵다.
- 다른 프로세스의 스레드를 제어할 수 없다.
- 자원 공유시 동기화 문제가 발생한다.
- 하나의 스레드가 문제가 발생하면 전체 프로세스가 영향을 받는다.
동시성 이슈 Concurrency Issue
스레드 간 자원 공유는 전역 변수(data segment)를 이용하므로 함게 사용할 때 충돌이 발생할 수 있다.
출처