프론트엔드 개발

프로세스와 스레드 본문

CS

프로세스와 스레드

태나미 2021. 3. 28. 15:49
프로세스와 스레드의 차이란?

프로그램: 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태.
프로세스: 운영체제로부터 자원을 할당받은 작업의 단위.

스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.

 

 

프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적인 상태라고 하며 이 상태의 프로그램을 프로세스라고 한다.

운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해 준다.

각 프로세서는 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.

할당받는 시스템 자원의 예

- CPU 시간

- 운영되기 위해 필요한 주소 공간

- Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역

 

스레드란 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.

기본적으로 하나의 프로세스가 생성되면 하나의 스레드가 같이 생성되며, 이를 메인 스레드라고 부르며, 스레드를 추가로 생성하지 않는 한 모든 프로그램 코드는 메인 스레드에서 실행된다.

스레드의 프로세스의 자원 공유

프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고,

나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

즉, 스레드는 프로세스 내에서 Stack 메모리 영역을 제외한 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유한다.

하나의 프로세스는 여러 개의 스레드를 가질 수 있으며 이를 멀티 스레드라고 한다.

왜 멀티 프로세스를 사용하지 않고, 멀티 스레드를 사용하는 것일까?

=> 운영체제가 시스템 자원을 효율적으로 사용하기 위해서 스레드를 사용.

멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우,

프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 사용할 수 있다.

또한, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적기 때문에 작업들 간의 통신의 부담이 줄어든다.

 

멀티스레드의 단점

  1. 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
  2. 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다.

멀티스레드를 사용하면 각각의 스레드 중 어떤 것이 어떤 순서로 실행될지 그 순서를 알 수 없다.

만약 A 스레드가 어떤 자원을 사용하다가 B 스레드로 제어권이 넘어간 후 B 스레드가 해당 자원을 수정했을 때, 다시 제어권을 받은 A 스레드가 해당 자원에 접근하지 못하거나 바뀐 자원에 접근하게 되는 오류가 발생할 수 있다.

이처럼 여러 스레드가 함께 전역 변수를 사용할 경우 발생할 수 있는 충돌을 동기화 문제라고 한다.

스케줄링은 운영체제가 자동으로 해주지 않기 때문에 프로그래머가 적절한 기법을 직접 구현해야 하므로 프로그래밍할 때 멀티스레드를 사용하려면 신중해야 한다. 디버깅 과정도 까다로워지기 때문이다.

 

 

* Context Switching 이란?

멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 

인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.

 

출처:

gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://jeong-pro.tistory.com/93 

'CS' 카테고리의 다른 글

CS 기초지식 비트와 바이트의 차이점  (1) 2021.06.04
Comments