본문으로 바로가기

📌프로세스

- 메모리에 올라와서 실행되고 있는 프로그램의 인스턴스

- 프로세서에 의해 동작하고 있는 프로그램

- 스레드 단위 작업을 지원하기 위한 자원 할당의 단위

 

📌프로세스의 구조

- Stack : 호출된 함수, 지역 변수 등 임시 데이터

- Heap : 동적으로 생긴 데이터 (객체..)

- Data : 전역변수 (static, global)

- Code : 프로그램의 코드

여러개의 프로세스로 하나의 작업을 구성할 수 있음 -> 멀티 프로세스

각 프로세스가 따로 Stack, heap, data, code를 가지고 있기 때문에 비효율이 발생한다.

(Context Switching을 할 때에, 비효율이 발생함)

다른 프로세스의 정보를 이용하기 위해 통신이 필요하다.

 

이러한 비효율을 없애기 위해 나온것이 스레드이다.

 

📌 스레드 : 프로세스 내에서 실행되는 작업 흐름의 단위

📌 스레드의 구조

하나의 프로세스 안에서 Code, Data, Heap 영역을 공유한다.

 

📌 멀티 프로세스 vs 멀티 스레드

Code, Data, Heap 영역을 공유하는 멀티 스레드가

컨텍스트 스위칭 비용이 더 적게 들기 때문에 효율적이다.

 

📌 멀티 스레드 주의점

디버깅이 까다로움

한 프로세스 안의 스레드에 문제 발생 -> 같은 프로세스 안의 스레드도 같이 문제가 생김

같은 데이터를 공유하므로, 데이터 동기화에 항상 신경 써야한다.

 

📌 결론

자원은 프로세스 단위로 받고,

작업/스케줄링은 스레드 단위로 진행한다.