티스토리 뷰

반응형

스레드(Thread)

운영체제에서 스레드는 프로세스 내부에서 실행되는 작은 작업 단위이다. 스레드는 프로세스의 실행 흐름을 구성하는 단위로, 하나의 프로세스는 내부에 여러개의 스레드가 포함될 수 있다.

 

스레드를 설명하기 전에 프로세스와의 차이점을 알기위해, 프로세스에 대해서 간략하게 설명한다.

 

프로세스는 독립된 객체로서 생성되면 각각의 메모리 자원을 할당 받고, 서로에게 접근이 불가능하다. 프로세스 특성상 서로에게 접근이 불가능하기에, 여러개의 프로세스를 처리하기 위해서 서로의 상태 자원을 공유하려면 IPC라는 커뮤니케이션 기법이 필요하다. IPC는 커널의 공유 메모리를 활용하여 프로세스들간의 데이터 상태 정보를 주고 받는다.


스레드의 특징

특징 ①

프로세스들이 서로의 데이터에 접근하는것이 직접적으로 불가능한데 반면, 스레드는 프로세스 내부에 존재하기에 프로세스의 데이터 영역에 접근이 가능하다. 그리고 스레드들끼리 서로의 데이터에 접근 가능하다. IPC 필요없이 프로세스의 데이터를 가져올 수 있다.

 

 

특징 ②

스레드도 일종의 작업 단위라서, 프로세스처럼 작업이 처리된다(리눅스에선 스레드를 Light Weight Process라고 부르는데, 프로세스 취급을 하는 것이다) 이 말은 즉, 스레드도 프로세스처럼 작업을 병렬로 처리해서 속도를 높일 수 있다는 것이다.

 

 

특징 ③

스레드는 일종의 함수로 구현된다. 스레드도 함수라서 데이터(지역 변수)를 다루고, 데이터를 관리하기 위해 stack 메모리 영역을 가진다. 이 stack공간은 프로세스가 가지는 stack 메모리 영역과는 별개이며, 스레드의 메모리 영역을 thread stack이라고 부른다. 

프로세스는 메모리 영역을 크게 4가지(code, data, stack, heap)으로 나눌 수 있지만, 스레드는 thread stack 메모리 공간만 갖게된다.

스레드 안에 포함된 데이터(지역 변수)는 thread stack에 저장된다. (단, 프로세스의 stack 영역에는 스레드의 지역변수는 포함하지 않는다)

 

 

특징 ④

하나의 프로세스는 내부에 여러개의 스레드를 가질 수 있다. 


멀티 스레드와 멀티 프로세스

멀티 스레드는 하나의 프로세스 내부에서 여러 개의 스레드가 동시에 실행되는 것이다. 스레드끼리는 서로의 메모리 공간(thread stack)을 공유하고 접근할 수 있다. IPC 통신이 아닌 메모리 기반 통신을 사용하기에 통신 속도가 빠르다. 각 스레드들은 여러 자원을 공유하기에, 하나의 스레드에 문제가 생기면 나머지 스레드들도 영향을 받을 수 있다. 프로세스 내에서 스레드의 작업을 여러개로 분할(쪼개서) 병렬로 처리할 수 있다.

 

멀티 프로세스는 여러 개의 독립적인 프로세스가 동시에 실행되는 것이다. 각 프로세스는 독립된 메모리 공간을 가지며, 서로에게 접근하려면 IPC 기법을 사용해야 한다. 각 프로세스는 각각 고유한 자원을 관리하고 있어 서로에게 영향을 미치지 않는다. 하나의 프로세스 작업을 여러개로 분할(쪼개서) 병렬로 처리할 수 있다. 이때, 프로세스는 스레드 단위로 작업을 분할한다. 


스레드의 장점

장점 ① : 응답성(성능) 향상

스레드 간의 작업 분할과 병렬 처리로 인해 사용자가 응용 프로그램을 원활하게 사용하는데 빠른 응답성(결과)를 제공할 수 있다.

 

장점 ② : 자원 공유 효율성 향상

스레드는 하나의 프로세스 내에서 실행되기 때문에, 프로세스의 자원을 공유하여 접근할 수 있다(IPC 기법과 같은 번거로운 작업이 필요 없음). 그리고 스레드는 프로세스 내부에 있기 때문에 별도의 메모리 공간을 할당할 필요없이, 프로세스 내부에서 데이터를 관리하면 된다. 스레드는 프로세스 내부에서 thread stack이라는 공간에 데이터를 관리한다. 따라서 스레드를 사용하면 자원 공유의 효율이 높다.

 

장점 ③ : 동시성

여러 개의 스레드가 동시에 실행될 수 있어서, 작업을 병렬로 처리할 수 있다

 

장점 ④ : 간결성

작업을 분리할 수 있어서 코드가 간결해질 수 있다.


스레드의 단점

단점 ① : 스레드 간의 상호간섭

멀티 스레드(여러 스레드 사용)가 실행 중인 상황에, 스레드 간의 상호간섭 문제가 발생할 수 있다. 프로세스는 한 개가 다운되면, 그 프로세스만 작업이 멈추고 다른 프로세스에는 영향이 가지 않는다. 하지만 스레드는 다른 스레드가 작업을 방해하거나, 스레드간의 우선순위 설정에 문제가 있을 경우, 서로에게 영향을 미치기 때문에 예상치 못한 이슈가 발생할 수 있다.

 

단점 ② : 성능 저하

스레드를 많이 생성하면 성능 저하가 발생할 수 있다. 스레드를 많이 생성하면, 스레드 스케줄러에서 각각의 스레드들이 병렬로 실행되기 위해 컨텍스트 스위칭이 빈번하게 발생해야 하기 때문에 성능 저하가 발생할 수 있다. 

 

단점 ③ : 동기화 이슈

여러 스레드가 공유 자원에 동시에 접근할 때, 동기화 문제가 발생할 수 있다. 경쟁 상태(Race Condition) 문제는 스레드 간의 실행 순서나 타이밍에 따라 예측할 수 없는 결과가 발생할 수 있다. 

 

단점 ④ : 자원 소비

스레드는 개별적인 실행 흐름을 가지기 때문에, 스레드마다 stack 및 레지스터 등의 메모리 자원을 소비한다. 따라서 스레드의 수가 증가하면 메모리 사용량도 증가하게 되어 시스템 자원이 한계에 도달할 수 있다.


스레드의 사용은 많은 장점이 있지만 단점도 존재하기에 올바른 동기화 기법과 설계를 통해 적절하게 관리하고 조절해야 한다.

 

 

2023.06.12 - [Basic/ComputerScience] - [운영체제] 프로세스란?

 

[운영체제] 프로세스란?

프로세스(Process) 프로세스는 실행 중인 프로그램을 의미한다. 프로세스는 운영체제에 의해 관리되며, 독립적으로 실행되고 자원을 할당 받을 수 있는 단위이다. 운영체제는 프로세스들에게 적

jerryjerryjerry.tistory.com

2023.06.19 - [Basic/ComputerScience] - [운영체제] IPC란? / 프로세스간 커뮤니케이션

 

[운영체제] IPC란? / 프로세스간 커뮤니케이션

프로세스간 커뮤니케이션을 해야하는 이유 프로세스들은 각각 개별적으로 분리되어 생성되며 프로세스들끼리는 서로에게 접근할 수 없다. 즉, 프로세스는 완전히 독립된 객체이며, 서로에게

jerryjerryjerry.tistory.com

 

반응형
댓글
공지사항