쓰레드란??

2023. 4. 7. 10:04컴퓨터구조와 운영체제

728x90

쓰레드의 등장 배경은 다음과 같다.

프로세스는 하나의 작업을 가지고 여러 단위로 쪼개서 일할 때 참 난감하다..

 

  • 프로세스 생성의 오버헤드가 크다.
  • Process Context Switching의 오버헤드가 크다.
  • 프로세스간의 통신이 어렵다.
    • 프로세스들은 완전히 독립적인 주소공간을 가지고 있따.

따라서, 조금 더 가벼운 쓰레드 등장!!

 

쓰레드


 

쓰레드는 프로세스 안에서 프로세스의 자원을 이용해서 작업을 수행하는 단위이다.

예를 들어서, 싱글 쓰레드는 하나의 자원에 쓰레드가 하나이고, 멀티 쓰레드는 하나의 자원에 쓰레드가 여러개이다.

 

(참고로, 1개의 프로세스에는 무조건 1개 이상의 쓰레드가 있다.)

 

그렇다면, 쓰레드간의 통신은 어떻게 할까?


프로세스는 쓰레드의 컨테이너이므로, 프로세스가 쓰레드들에게 공유 환경을 제공해준다.

 

  • 모든 쓰레드는 프로세스의 코드,데이터,힙을 공유한다.
  • 단, ‘스택’은 쓰레드별로 별도의 공간을 사용한다.

 

쓰레드의 장점 및 단점


장점

  • CPU 응답성 향상
  • 자원 공유, 효율성 향상
  • 다중 CPU 운용 용이

단점

  • 모든 자원을 공유하는 특성상 하나의 쓰레드가 잘 못되면 프로세스 전체가 다 죽을 수도 있음
  • 쓰레드가 많아지게 된다면, 잦은 Context Swithching이 발생

쓰레드 라이프 사이클

  • 준비 상태(Ready) - 쓰레드가 스케줄 되기를 기다리는 상태
  • 실행 상태(Running) - 쓰레드가 CPU에 의해 실행 중인 상태
  • 대기 상태(Blocked) - 쓰레드가 입출력을 요청하거나 sleep()과 같은 시스템 호출로 인해 커널에 의해 중단된 상태
  • 종료 상태(Terminated) - 쓰레드가 종료한 상태

그렇다면, 쓰레드가 많은 것이 성능이 좋은 것인가??

꼭 그렇지만은 않다.

 

여러 작업을 수행할 때, 쓰레드간의 작업 전환이 일어나야한다.

작업 전환을 할 때는 현재 진행 중인 작업의 상태, 예를 들면 다음에 실행해야할 위치 등의 정보를 저장하고 읽어와야한다. 또한, 한정된 자원을 두고 멀티쓰레드끼리 경쟁하게 되기 때문에 이로 인해서도 시간이 소요된다.

 

이러한 시간을 고려할 때, ‘단순히 멀티 쓰레드가 싱글 쓰레드보다 효율적이다.’ 에 대해 확답할 수 없다.

 

지금까지, 쓰레드에 대해서 알아봤습니다!

감사합니다~!

 

 

728x90