Skip to content

Latest commit

 

History

History
46 lines (27 loc) · 2.29 KB

Thread.md

File metadata and controls

46 lines (27 loc) · 2.29 KB

스레드(Thread)란?

어플리테이션 실행의 가장 기본 단위

  • 프로세스 내에서 각각 Stack만 따로 할당 받고 Code, Data, Heap 영역은 공유
  • 시스템 스레드, 사용자 스레드, 이벤트 스레드 등이 있다.
  • 시스템에서 생성하고 관리하며, 어플리케이션의 첫번째 스레드는 시스템 스레드이다.
  • 사용자 스테드는 메인스테드 외에 애플리케이션에서 명시적으로 생성한 스레드이다.
  • 사용자 인터페이스를 화면에 표시하는 애플리케이션에서의 메인스레드는 이벤트 스레드라 부른다.
  • 이벤트 스레드는 마우스 클릭이나 키 입력 들이 있다.

선점형 스레딩

  • 동시에 돌릴 수 있는 스레드 수는 컴퓨터에 있는 코어 개수로 제한된다.
  • OS에서는 아무때나 스레드 실행을 멈추고 다른 스레드를 실행시킬 수 있다.
  • 위와 같은 방법을 선점형 스레딩(Preemptive Threading)이라한다.

협력형 모델(Cooperative model)

  • 반대로 어떤 스레드가 멈추고 다른 스레드로 돌아가려면 강제가 아닌 명시적인 행동이 필요한 경우.

컨텍스트 스위칭(Context Switching)

  • 다른 스레드가 시작될 수 있도록 한 스레드를 멈추는 것.

멀티 스레딩이란?

  • 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것

멀티 스레드 동기화 문제

스레드 간의 자원 공유는 전역 변수를 이용하므로 함께 사용할 때 충돌이 발생할 수 있음

멀티 프로세스 대신 멀티 스레드를 사용하는 이유?

자원의 효율성이 높아지고 처리 비용 및 응답 시간이 줄어든다.

같은 메모리를 사용하므로 메모리 이용 효율이 올라간다.

  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어듦.
  • 프로세스 간의 문맥 교환시 CPU 레지스터 교체뿐만 아니라 RAM과 CPU 사이의 캐시 메모리에 대한 데이터까지 초기화되므로 오버헤드가 큼
  • Stack 이외의 모든 메모리를 공유하기 때문에 스레드 간의 통신 비용이 더 적음
  • 문맥 교환시 Stack 영역만 처리하기 때문에 스레드 간의 전환 속도가 더 빠름