본문 바로가기

Programming/프로그래밍 내용 정리

[운영체제] 프로세스 vs 스레드 vs 멀티스레드 차이점이 뭔가요?

🎈 프로세스 (Process)

 

- 운영체제에서는 실행 중인 하나의 애플리케이션프로세스라고 한다.

 

- 사용자가 애플리케이션을 실행하면

    --> 운영체제로부터 실행에 필요한 메모리를 할당 받아

    --> 애플리케이션의 코드를 실행한다.

 

- 이 때 실행되는 애플리케이션을 '프로세스' 라고 한다.

 

(예) 크롬 브라우저 2개를 실행하면, 2개의 프로세스가 생성됨. 

이렇게 하나의 애플리케이션은 여러 프로세스를 만들기도 함

 


🎈 스레드 (Thread)

 

- 사전적 의미 : 한 가닥의 실

 

- 한 가지 작업을 실행하기 위해, 순차적으로 실행한 코드를 실처럼 이어 놓았다고 해서 붙여진 이름

 

- 하나의 스레드 = 하나의 흐름 

 

- 프로세스 내에서 실행되는 흐름의 단위 

 

- 한 프로세스 내에 스레드가 2개라면, 코드가 실행되는 흐름이 2개 생긴다는 의미

 

- 스레드는 다른 스레드와 독립적으로 동작

 

- 각 스레드마다 call stack이 존재 (stack : 실행중인 서브루틴을 저장하는 자료구조) 

 

 


🎈 멀티 스레드 (Multi-Thread)

 

- 멀티태스킹 : 두 가지 이상의 작업을 동시에 처리하는 것

 

- 운영체제는 멀티태스킹을 할 수 있도록 프로세스마다 CPU 및 메모리 자원을 적절히 할당하고 병렬로 실행함

 

- 예를들어, 크롬 브라우저에서 음악을 들으면서 인텔리제이로 코딩을 한다고 할 때

   하나의 프로세스가 어떻게 두 가지 이상의 작업을 처리할 수 있는 것일까? --> '멀티 스레드'

 

- 멀티 스레드는 애플리케이션 내부의 멀티 태스킹이라고 할 수 있음

 


🎈 멀티 스레드 (Multi-Thread)의 장점

 

- 메모리 공간과 시스템 자원의 소모가 줄어 든다.

 

- 스레드 간의 통신이 필요한 경우, 별도의 자원을 이용하는 것이 아니라

전역변수 공간 또는 동적으로 할당된 공간인 Heap을 이용한다.

 

- 프로세스 간 통신방법에 비해 스레드 간의 통신방법이 간단하다.

 

- 시스템처리량이 향상되고, 자원의 소모가 줄어들어 -> 프로그램 응답 시간이 단축된다.

 

- 이런 장점 때문에, 여러 프로세스로 할 수 있는 작업을 하나의 프로세스에서 스레드로 나눠 수행한다.

 


🎈 멀티 스레드 (Multi-Thread)의 단점

- 멀티 프로세스 기반으로 프로그래밍 할 때에는 프로세스 간 공유하는 자원이 없다.

따라서 동일한 자원에 동시에 접근하는 일이 없었다.

 

- 하지만 멀티 스레딩을 기반으로 프로그래밍 할 때는 공유하는 자원에 대한 고민이 필요하다.

 

서로 다른 스레드가 같은 데이터에 접근하고,

Heap 영역을 공유하기 때문에 

서로 다른 스레드가 같이 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정하는 일이 발생할 수 있다.

 

- 그렇기 때문에 멀티스레딩 환경에서는 '동기화' 작업이 필요하다.

동기화를 통해서 작업 처리 순서를 제어하고,

공유 자원에 대한 접근을 제어해야 한다.