부리부리부리

Thread 본문

Computer Science/OS

Thread

부리부리부리부리 2023. 12. 12. 01:00

쓰레드를 사용하는 이유

프로세스의 한계

과거에는 프로그램을 실행할 때 프로세스 하나만을 사용했었다고 한다. 기술이 발전됨에 따라 프로그램이 복잡해졌고, 프로세스 하나만으로 처리하기에는 무리가 있었다. 여러 개의 프로세스를 사용하자니, 각 프로세스는 독립적인 메모리 공간을 할당받기 때문에 메모리 중복 사용 문제가 발생했다. 이러한 문제를 해결하기 위해 쓰레드가 탄생하였다.

쓰레드란?

프로세스 내부에서 실행하는 작업의 단위이다. 하나의 프로세스는 일반적으로 하나의 쓰레드(Main Thread)를 가지고 있지만, 여러 개의 쓰레드가 존재할 수 있고 이를 멀티 쓰레드(Multi Thread)라고 한다.

귀여운 프로세스와 쓰레드

 

Thread 의 장단점

장점

  1. Thread는 Stack을 제외한 하나의 프로세스 내의 자원(Code, Data, Heap)을 공유하기 때문에 프로세스에 비해 자원 할당 비용이 적게 들고 문맥 교환(Context Swtich) 비용도 적게 든다. 
  2. Multi Thread의 경우 일부 Thread의 처리가 지연되더라도 다른 Thread 에서 작업을 계속 처리할 수 있음
  3. 프로세스 간의 통신은 IPC가 필요한 반면, Thread는 공유(데이터, 힙) 주소 공간을 사용하여 데이터를 교환할 수 있음
  4. 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리

단점

  1. 하나의 Thread에서 발생한 문제가 프로세스 전반에 영향을 미칠 수 있음
  2. 자원을 공유하기 때문에 동기화 문제가 발생할 수 있음

 

Thread Control Block (TCB)

https://teraphonia.tistory.com/802

그림에서 알 수 있듯이, TCB의 경우 PCB에 비해 적은 정보만을 가지고 있다. 아무래도 프로세스의 자원을 공유하고 있기 때문이다. 쓰레드는 프로세스 내에서 자원을 공유하므로, 쓰레드 간의 상태 및 자원 관리에 필요한 정보만을 가지면 충분하다.

 

쓰레드의 Life Cycle

https://zion437.tistory.com/133

 

쓰레드의 Life Cycle은 다음과 같이 5단계로 나뉜다.

  1. New (생성): Thread가 생성되었지만 아직 시작되지 않은 초기 상태
  2. Runnable (실행 가능): start() 메서드나 유사한 방법을 통해 Thread 가 시작되었으며, 실행을 기다리는 상태
  3. Running (실행): Thread 가 실행 중이며 CPU를 할당받아 작업을 수행하는 상태
  4. Blocked (대기 또는 차단): Thread가 어떤 이벤트를 기다리거나 특정 조건이 충족될 때까지 대기 상태에 있는 상태
  5. Dead (종료): Thread가 실행이 완료되었거나 예외가 발생하여 종료된 상태

프로세스 vs 쓰레드

사실 공부하다보니 프로세스와 쓰레드가 vs로 비교하는게 좀 어색하게 느껴지지만 면접을 위해 정리해놓는다.

 

프로세스

  1. 프로세스 별로 독립된 메모리 공간, 파일, 자원을 가진다.
  2. 독립된 메모리 공간을 가지므로 자원 공유가 어렵고, 프로세스 간 통신(IPC)이 필요
  3. 무겁고 성능 소모가 크다.
  4. 독립된 메모리를 사용하므로 동시에 여러 작업을 수행할 수 있다.

쓰레드

  1. 하나의 프로세스 내에서 실행되므로 쓰레드 간 공유하는 자원이 있다.
  2. 프로세스 내 자원을 공유할 수 있으므로 공유 메모리를 통해 간단한 통신이 가능
  3. 경량이며, 생성 및 Context Switching이 빠르다.
  4. 하나의 프로세스 내에서 공유 자원을 사용하므로 동시성 제어가 필요하다.

참고 사이트

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4#%EC%8A%A4%EB%A0%88%EB%93%9C

 

👩‍💻 ‍완전히 정복하는 프로세스 vs 스레드 개념

한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아

inpa.tistory.com

 

'Computer Science > OS' 카테고리의 다른 글

OSI 모델과 TCP/IP 모델  (1) 2024.01.02
스케쥴러  (0) 2023.12.30
Dead Lock  (2) 2023.12.22
프로세스(Process)  (2) 2023.12.11