✅프로세스(Process)
💡 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스 운영체제로부터 시스템 자원을 할당받은 작업의 단위

특징
- 프로세스는 독립된 메모리를 할당 받는다.
- 프로세스가 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리하는데, 이를 프로세스 주소 공간이라고 한다.
- 프로세스 주소 공간 → Code, Data, Stack, Heap 으로 구성됨
- Code : 코드 자체를 구성하는 메모리 영역 (프로그램 명령)
- Data : 전역 변수, 정적 변수 등
- Stack : 지역 변수, 함수 매개변수, 리턴 값 (임시 메모리 영역)
- Heap : 동적 할당 시 사용 (new(), malloc() 등…)
- 기본적으로 프로세스마다 최소 1개의 스레드(메인 스레드)를 갖는다.
➕멀티 프로세스
💡 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.
단점
- 문맥 교환(Context Switching)에서의 오버헤드
- 문맥 교환 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다.
- 프로세스 간 통신 기법(IPC, InterProcess Comunication)
- 프로세스는 각 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스 사이의 변수를 공유할 수 없다
- 따라서 IPC라는 방법을 사용해야 하며, 이는 어렵고 복잡한 통신 방법이다.
✅스레드(Thread)
💡 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위

특징
- 스레드는 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack 영역을 따로 할당받는다.
- 프로세스와 해당 프로세스 내의 다른 스레드와 자원과 공간을 공유하면서 사용.
➕멀티 스레드
💡 하나의 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것
장점
- 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
- 스레드 간 통신 시, Data, Heap 메모리 영역을 이용해 데이터를 주고 받으므로 통신 방법이 간단.
- Context Switching 시 PCB 및 캐시 메모리를 비울 필요가 없기 때문에 비용이 적고 더 빠르다.
단점
- 서로 다른 스레드가 Data, Heap 영역 등을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 즉, 자원 공유 동기화 문제가 발생한다.
- 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
Thread-safe
- 멀티스레드 환경에서 여러 스레드가 동시에 사용되어도 안전하다는 것을 말함
- 즉, 여러 스레드가 프로세스의 공유 자원에 접근할 때, 공유 자원의 무결성을 보장하는 것을 말함
프로세스와 스레드의 차이점
- 자원 공유 여부
- 각각의 프로세스는 독립적인 메모리 영역을 가지고 있기 때문에 한 프로세스가 사용하는 메모리 영역은 다른 프로세스에서 직접 접근할 수 없다.
- 스레드는 같은 프로세스 내에서 실행되기 때문에 프로세스 내의 자원을 모두 공유할 수 있다.
- 프로세스 간 전환은 스레드 간 전환보다 느림
- 스레드를 이용하여 멀티태스킹을 구현하는 것이 더 효율적 →but, 스레드 간 동기화와 같은 문제를 고려해야 가기 때문에 스레드를 사용하는 것이 더 복잡할 수 있다..
'스파르타 기술면접' 카테고리의 다른 글
| 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가? (0) | 2023.04.29 |
|---|---|
| Stack과 Queue 그리고 Array와 Linked List 자료구조 (0) | 2023.04.25 |
| List / Set / MAp, HashMap (0) | 2023.04.16 |
| Filter / Interceptor / AOP (0) | 2023.04.11 |
| DI의 방식 중 필드 vs 생성자 주입 방식 (0) | 2023.04.11 |