[OS] 프로세스(Process)와 스레드(thread)
1. 프로세스
- 어플리케이션을 실행하면 운영체제로부터 필요한 메모리를 할당받아 코드를 실행
- 하나의 어플은 2개 이상의 프로세스를 가질 수 있음 ex) chrome exe 2개 생김
- 멀티프로세스는 각자 다른 메모리를 운영체제로 할당받기 때문에 프로세스 간 영향을 미치지 않음
Code : 코드 자체를 구성하는 영역
Data : 전역 변수, 정적 변수, 배열 등 초기화된 데이터
Stack: 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
Heap: 동적 할당 시 사용, new(), malloc() 등
- 하나의 프로그램이 실행될 때, 동시에 여러가지 프로세스가 실행
- 우리 눈에는 동시에 진행되는 것처럼 보이지만, 실제로 cpu는 프로세스 1을 어느정도하고 저장, 프로세스2를 진행하고 다시 돌아가며 콘텍스트 스위칭(Context switching)이 일어남
- 반복이 많아지게 되면 CPU의 부담이 늘어나고, 중복된 자원들이 비효율적으로 관리되서 그럴 때 멀티스레드를 사용
2. 멀티프로세스
- 하나의 컴퓨터에 여러 CPU 장착 -> 하나 이상의 프로세스들을 동시에 처리 (병렬)
- 두개 이상 프로세서(CPU) 가 협력적으로 하나 이상의 작업(task)을 동시에 처리 (병렬처리)
- 장점
- 안전성이 높음 (독립된 구조)
- 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않음
- 여러개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴
- 단점
- 각각 독립된 메모리 영역을 갖고 있어
- 작업량 많을수록 오버헤드 발생
- Context switching으로 인한 성능저하
- Context Switching
- CPU는 한번에 하나의 프로세스만 실행 가능
- CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 컨텍스트 스위칭
3. 멀티태스킹
- 두가지 이상의 일을 동시에 처리 ( 멀티스레드는 멀티태스킹을 하기 위함 )
- 한 프로세스 내에서 멀티태스킹을 할 수 있게 만들어진 어플리케이션 ex) 유투브, 음악재생
4. 멀티스레드
- 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 하나의 프로세스 내의 동작되는 여러 실행을 프로세스 하나에 자원을 공유하면서 동시에 실행
- 한 프로세스 내의 주소 공간이나 자원들을 대부분 공유
- 기본적으로 하나의 프로세스가 생성되면 하나의 메인스레드가 생성
- 스택만 분리해서 사용하는 이유
- LIFO라서 스택영역을 공유하면 프로세스가 섞인 채로 순서대로 나오게 되므로 더 복잡해지기 때문에 독립적으로 존재
- 장점
- 프로그램의 응답 시간 단축
- 시스템의 처리율 향상
- 시스템 자원 소모 감소
- 프로세스간 통신 방법에 비해 스레드 간 통신 방법이 간단(캐시 메모리를 비울 필요가 없음)
- 단점
- 여러 개의 스레드를 이용하는 경우, 충돌 문제가 발생하지 않도록 동기화 문제 해결(병목현상, 데드락 등)
- 디버깅이 어려움
- 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 받음
- 단일 프로세스 시스템에서는 효과를 기대하기 어려움?
- 스레드는 한가락의 실, 멀티 스레드는 여러가닥의 실( 코드실행 )
- 멀티스레드는 하나의 어플리케이션 내부에서의 멀티태스킹
- 하나의 프로세스 내에서 생성되지 때문에 스레드가 문제가 발생하면 프로세스 자체에 영향을 줄 수 있다. 즉 멀티스레드의 예외처리가 중요!
- 싱글스레드 어플리케이션에서 메인 스레드가 종료되면 프로세스도 종료
- 멀티스레드에서 스레드가 한개라도 존재한다면 프로세스는 종료되지 않음, 설령 메인스레드가 먼저 종료되더라도 프로세스는 살아있음
참고
https://yoonemong.tistory.com/144
https://devnick.tistory.com/38
This is personal diary for study documents.
Please comment if I'm wrong or missing something else 😄.
댓글남기기