반응형

 

🚀 스레드의 개념

스레드(Thread)란 프로세스 내에서 실행되는 흐름의 단위를 의미합니다.

일반적으로 하나의 프로그램은 하나의 스레드를 가지고 있지만, 프로그램의 환경에 따라 다수의 스레드를 동시에 실행할 수 있으며 이러한 실행 방식을 멀티스레드(Multi Thread)라고 합니다.

 

 

⚖️ 프로세스 vs 스레드

프로세스 : 별도의 메모리 공간에서 실행
스레드 : 동일한 프로세스 내의 공유 메모리 공간에서 실행

 

 

📝 스레드의 장단점

장점

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

단점

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

 

 

🔵 스레드의 유형

스레드는 크게 커널 영역과 사용자 영역으로 구분되는데, 이 중 멀티 스레드를 어느 영역에서 구현했느냐에 따라 사용자 수준 스레드와 커널 수준 스레드로 구분할 수 있습니다.

 

1. 커널 수준 스레드(1 : 1 매핑 방식)

스레드를 OS(커널)이 직접 관리(스레드 생성, 스케줄링 등등)합니다.

장점

  • 커널이 각 스레드를 개별적으로 관리
  • 프로세스 내 스레드들이 병행 수행 가능
  • 하나의 스레드가 block 되어도 다른 스레드는 계속 작업 가능

단점

  • 커널 영역에서 스레드의 생성 및 관리
  • 문맥 교환으로 인한 오버헤드가 큼
  • 사용자 스레드보다 생성 및 관리 속도가 느림

 

2. 사용자 수준 스레드(N : 1  매핑)

사용자 영역의 스레드 라이브러리로 구현하며, 라이브러리는 스레드의 생성, 스케줄링 담당합니다. 또한 커널은 스레드의 존재를 인식하지 못하기 때문에 커널의 개입을 받지 않습니다.

장점

  • 커널의 개입을 받지 않아 스레드의 생성 및 관리의 부하가 적음
  • 동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠름
  • 라이브러리를 통한 이식성이 높음

단점

  • 커널은 프로세스 단위로 자원을 할당하기 때문에 하나의 스레드가 block 될 시 모든 스레드가 대기해야 함
    (커널이 프로세스의 내부 스레드를 인식하지 못하여 해당 프로세스를 대기상태로 전환시키기 때문)

 

3. 혼합 스레드(N : M 매핑 방식)

사용자 수준 스레드와 커널 수준 스레드를 혼합한 구조입니다. 일-대-일 방식과 다-대-일 방식의 문제점을 해결하기 위해 고안되었습니다.

장점

  • 프로세스 내 스레드들이 병행 수행 가능
  • 사용자는 원하는 수만큼 스레드 사용
  • 효율적이면서도 유연함
  • 스레드 풀링 기법을 통해 일대일 스레드 매핑에서의 오버헤드를 줄여줌

 

🙄 스레드 풀링?

시스템이 관리하는 스레드의 풀을 응용프로그램에 제공하여 스레드를 효율적으로 사용할 수 있게 하는 방법.

미리 생성한 스레드를 재사용하도록 하여 스레드 생성 시간을 줄이고 시스템 부하를 덜어줍니다. 그리고 동시에 생성할 수 있는 스레드수를 제한하여 시스템의 자원 소비를 줄이고 해당 응용프로그램의 성능을 일정 수준으로 유지할 수 있습니다.

 

 

 

📚 참고 사이트

https://yoongrammer.tistory.com/55

 

반응형

+ Recent posts