Thread - 스레드

Lee Gayoung·2022년 9월 30일
0

UMC 3기

목록 보기
7/10

🌟스레드(Thread)란?

스레드는 프로세스(process) 내부의 CPU 수행 단위이다. 즉, 실제로 작업을 수행하는 주체를 의미한다. 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 모든 프로세스에는 한 개 이상의 스레드가 존재하여 프로세스가 할당받은 자원을 이용하여 작업을 수행한다.

- 멀티 스레딩 (Multithreading)

멀티 스레딩은 하나의 프로세스 내에서 여러 스레드가 동시에 작업을 수행하는 것이다. 실제로는 한 개의 CPU가 한 번에 단 한가지 작업만 수행할 수 있기 때문에 아주 짧은 시간 동안 여러 작업을 번갈아 가며 수행함으로써 동시에 여러 작업이 수행되는 것처럼 보이게 한다.

각 프로세스는 운영체제로 부터 할당받은 Code, Data, Heap, Stack 영역을 각자 보유한다. 쓰레드는 Code, Data, Heap 영역은 공유하고 Stack영역만 각자 보유한다.

🌟 멀티 프로세스 vs 멀티 스레드

✅ 멀티 프로세스

멀티 프로세스는 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스들이 하나의 작업을 처리하도록 한다.

  • Context Switching이 발생하면 캐시에 존재하는 모든 데이터를 리셋한 뒤 다시 캐시 정보를 불러와야한다. 즉, Context Switching의 오버헤드(overhead)가 크다.
    (프로세스 문맥 교환시 TLB가 flush 되기 때문이다. 스레드는 Stack 영역만 처리하면 된다.)

    📝 Context Switching
    CPU는 한번에 하나의 프로세스만 실행 가능하다. CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정을 Context Switching라 한다. 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

  • 프로세스간의 통신에 복잡한 IPC를 사용하여 통신해야 한다. 
  • 여러 개의 자식 프로세스 중 하나에 문제가 발생했을 때 그 자식 프로세스를 제외한 다른 프로세스에는 영향을 주지 않는다.

✅ 멀티 스레드

  • 시스템 자원 소모가 감소한다. 프로세스를 생성하는 system call이 줄어들어 자원을 효율적으로 관리할 수 있다.

  • 시스템 처리량(Througput)이 증가한다. 동시성와 병렬성을 얻을 수 있기 때문에 효율적이다.

    📝 동시성과 병렬성

  • 프로세스 내의 Data, Code, Heap 영역을 공유하기 때문에 쓰레드 간의 통신이 간단하다. 

  • 하나의 스레드가 blocked 상태인 동안 (ex - I/O를 기다리거나 메모리 적재를 기다리는 중) 다른 스레드는 실행되기 때문에 사용자의 응답에 대한 빠른 응답성을 가질 수 있다.

  • 자원공유로 인해서 동기화(Synchronize) 문제, 교착상태(deadlock) 등이 발생할 수 있다.

  • 디버깅이 까다롭다.

  • 하나의 쓰레드에 문제가 발생하면 전체 프로세스에 영향을 준다.

🌱 참고 자료

  1. 스레드(Thread)란?
  2. [운영체제] 쓰레드(Thread)란? | 멀티프로세스 멀티쓰레드 차이
  3. 멀티 프로세스(Multi Process)와 멀티 스레드(Multi Thread)
  4. [운영체제] Concurrency(동시성)과 Parallelism(병렬성) 이해하기

0개의 댓글