본문 바로가기

개발에 도움이 되는/CS

Program, Process, Thread

 

Program : 파일이 Disk에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태 (코드 덩어리 파일)

 

Process : 운영체제로부터 자원을 할당 받은 작업의 단위(메모리에 올라가 프로그램을 실행한 상태 = 동적인 상태)

Process는 Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역을 할당 받는다.

각 Process는 별도의 주소 공간에서 실행되며, 서로 독자적인 메모리 공간을 갖기 때문에 서로 메모리 공간을 공유할 수 없다. (= 다른 Process의 변수나 자료구조에 접근할 수 없다.)

다른 Process자원에 접근하려면 Process간의 통신(IPC)을 이용해야 한다.

Process는 최소 하나 이상의 Thread를 포함한다.

 

 - Processor : 컴퓨터 운영을 위해 기본적인 명령어들을 처리하고 반응하기 위한 논리회로

디바이스가 해야할 일을 총 지휘하는 Processor = CPU

 - 동시성(Concurrency) : Processor는 원래 한번에 하나의 Process만 작업할 수 있다.

동시성은 Processor 하나가 여러 작업을 돌아가며 일부분씩 수행하는 방식이다.

이렇게 진행중인 작업을 바꾸는 것을 Context Switching이라고 한다.

매우 빠른 속도로 돌아가기 때문에 여러 Process들이 동시에 진행되는 것 처럼 보인다.

 

Thread : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 (일의 최소 단위)

각 Thread는 독자적인 Stack 메모리를 갖는다.

Thread는 Process 내에서 각자의 Stack을 할당받고 Code, Data, Heap 영역은 공유한다.

각각의 Thread는 별도의 레지스터와 Stack을 갖고 있지만, Heap 메모리는 서로 읽고 쓸 수 있다.

Thread는 메모리를 공유하기 때문에 동기화, 데드락 등의 문제가 발생할 수 있다.

 

 

Multi Process VS Multi Thread

 

Multi Process : 하나의 응용프로그램을 여러 개의 Process로 구성하여 각 Process가 하나의 작업을 처리하도록 하는 것

 - 장점 : 여러 개의 자식 Process 중 하나에 문제가 발생하면 그 자식 Process 이상으로 다른 영향이 확산 되지 않음. 

 - 단점

 1. Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등 오버헤드 발생

 2. Process는 각각의 독립된 메모리 영역을 할당받았기 때문에 Process 사이에 공유하는 메모리가 없음.

 

Multi Thread : 하나의 응용프로그램을 여러 개의 Thread로 구성하고 각 Thread로 하여금 하나의 작업을 처리 하도록 하는 것

  - 장점

  1. 시스템 자원 소모 감소 (자원의 효율성 증대)

  2. 시스템 처리량 증가 (처리 비용 감소, Context Switching이 빠름)

  3. 프로그램 응답 시간 단축

  - 단점

  1. 주의 깊은 설계가 필요 (동기화 문제, 데드락 등)

  2. 디버깅이 힘듦

  3. 하나의 Thread에 문제가 생기면 전체 Process가 영향을 받음

 

반응형