본문 바로가기
운영체제

운영체제 - 스레드 (Thread)

by icblue21 2022. 12. 7.
728x90

스레드 (Thread)

 

스레드는 프로세스 내에서 실제로 작업을 수행하는 주체를 의미하며 모든 프로세스는 반드시 하나 이상의 스레드가 존재한다. 때문에 Light Weight Process 라고 부르기도 한다.

 

스레드는 하나의 프로세스에 여러개의 스레드를 생성할 수 있고, 스레드들은 동시에 실행이 가능하다 또한 프로세스 내에 있기 때문에 프로세스의 모든 데이터를 접근할 수 있다.

 

스레드에는 각기 실행 가능한 stack이 존재한다.

싱글 스레드 프로세스 vs 멀티 스레드 프로세스

 

멀티 스레드는 소프트웨어 병행 작업 처리를 위해 사용한다. 

A 스레드, B 스레드가 있으면 각 각의 스레드 스택 만 다르고 Code, Data, Heap 영역은 부모 프로세스의 영역을 공유한다.

 

스레드의 영역 공유

 

요즘은 프로그램을 개발할 때 짧은 반응 시간이 우선이기 때문에, 성능 개선에 신경을 많이 쓴다. 따라서 멀티 프로세스와 멀티 스레드를 고려하게 되는데 멀티 프로세스보단 멀티 스레드를 더 많이 사용한다. 왜냐하면 멀티 프로세스는 처음 구조를 잡을 때 만들어야 하지만 멀티 스레드는 프로그램의 일부 동작에서만 사용하도록 일부 코드 수정으로 가능하기 때문이다.

 

스레드의 장점

1. 사용자에 대한 응답성 향상 

    - 어떤 특정 작업을 하면서 사용자와 커뮤니케이션을 해야 하는 경우 멀티 스레드로 대응 할 수 있다.

 

2. 자원 공유의 효율성 증가

    - IPC기법과 같이 프로세스간 자원 공유를 위해 번거로운 작업을 할 필요가 없다.

    - 프로세스안에 있기 때문에 프로세스의 모든 데이터에 접근이 가능하다.

 

3. 작업이 분리되어 코드가 간결하다

    - 작성하기 나름이지만 유지보수가 편해진다

 

스레드의 단점

1. 너무 많은 스레드는 잦은 컨텍스트 스위칭을 유발하여 성능을 저하시키는 원인이 될 수 있다.

    - 스레드를 많이 생성하면 그만큼 스케쥴링해야 하므로 컨텍스트 스위칭이 빈번하게 일어날 수 밖에 없다.

 

2. 동기화 이슈로 비상적으로 동작할 가능성이 있다.

    - 따라서 동기화 코드를 적절히 추가해줘야 한다.

 

여기서 동기화(Synchronization)는 작업들 사이에 실행 시기를 맞추는 것을 말하며, 동기화 이슈는 여러 스레드가 동일한 자원에 접근시 각 스레드 결과에 영향을 주는 이슈를 말한다.

 

동기화 이슈에 대한 해결 방안으로는 Mutual exclusion (상호 배제)가 있다. 

 

프로세스 VS 스레드

 

1. 프로세스는 독립적이고 스레드는 프로세스의 서브셋이다.

2. 프로세스는 각각 독립적인 자원을 가지고 스레드는 프로세스의 자원을 공유한다.

3. 프로세스는 자신만의 주소영역을 가지고 스레드는 주소영역을 공유한다.

4. 프로세스간 커뮤니케이션을 위해서는 IPC기법을 사용해야 하지만 스레드는 그럴 필요가 없다.

댓글