📌프로세스
- 메모리에 올라와서 실행되고 있는 프로그램의 인스턴스
- 프로세서에 의해 동작하고 있는 프로그램
- 스레드 단위 작업을 지원하기 위한 자원 할당의 단위
📌프로세스의 구조
- Stack : 호출된 함수, 지역 변수 등 임시 데이터
- Heap : 동적으로 생긴 데이터 (객체..)
- Data : 전역변수 (static, global)
- Code : 프로그램의 코드
여러개의 프로세스로 하나의 작업을 구성할 수 있음 -> 멀티 프로세스
각 프로세스가 따로 Stack, heap, data, code를 가지고 있기 때문에 비효율이 발생한다.
(Context Switching을 할 때에, 비효율이 발생함)
다른 프로세스의 정보를 이용하기 위해 통신이 필요하다.
이러한 비효율을 없애기 위해 나온것이 스레드이다.
📌 스레드 : 프로세스 내에서 실행되는 작업 흐름의 단위
📌 스레드의 구조
하나의 프로세스 안에서 Code, Data, Heap 영역을 공유한다.
📌 멀티 프로세스 vs 멀티 스레드
Code, Data, Heap 영역을 공유하는 멀티 스레드가
컨텍스트 스위칭 비용이 더 적게 들기 때문에 효율적이다.
📌 멀티 스레드 주의점
디버깅이 까다로움
한 프로세스 안의 스레드에 문제 발생 -> 같은 프로세스 안의 스레드도 같이 문제가 생김
같은 데이터를 공유하므로, 데이터 동기화에 항상 신경 써야한다.
📌 결론
자원은 프로세스 단위로 받고,
작업/스케줄링은 스레드 단위로 진행한다.