본문 바로가기
TIL

내일배움캠프 3주차 프로세스와 쓰레드

by 율량동박씨 2024. 5. 1.

오늘의 키워드

  • 프로세스
  • 쓰레드

오늘의 내용

  • 프로세스
    • 운영체제로부터 자원을 할당받는 작업의 단위
    • Code, Data, Memory로 구조를 이룬다
  • 쓰레드
    • 프로세스가 할당받은 자원을 이용해 실행하는 단위
    • 작업 중인 프로그램에서 요청이 들어와 쓰레드를 생성해 요청을 처리한다
    • 프로세스 내에 주소공간, 메모리공간(Heap)을 공유받는다
    • 자신만의 메모리공간(Stack)을 할당받는다
  • 싱글 쓰레드와 멀티 쓰레드
    • 싱글 쓰레드 : 프로세스 안에서 하나의 쓰레드만 실행된다
    • 멀티 쓰레드 : 프로세스 안에서 여러 개의 쓰레드가 실행되는 것
      • 멀티 쓰레드는 각각의 쓰레드들이 자원을 공유하고 여러 작업을 동시에 해서 성능이 좋아진다
      • 스택을 제외한 모든 영역에서 메모리를 공유해서 자원을 효율적으로 사용한다
      • 응답 쓰레드와 작업 쓰레드를 분리해 응답이 빠르다
      • 서로 자원을 공유하기 때문에 자원을 먼저 사용하려고 하는 충돌이 발생할 수 있다
      • 데드락(교착상태)이 발생할 수 있다
        • 데드락 : 서로 자원을 원하는 상태에서 서로의 작업이 종료되기를 기다리는 상태
  • 데몬 쓰레드와 사용자 쓰레드
    • 데몬 쓰레드 
      • 백그라운드에서 실행되는 낮은 우선순위를 가지는 쓰레드
      • 보조적인 역할을 담당하며 대표적으로 메모리 영역을 정리하는 가비지 컬레터가 있다
    • 사용자 쓰레드
      • 보이는 곳에서 실행되는 높은 우선순위를 가진 쓰레드로 프로그램 기능을 담당
      • 사용자 쓰레드의 작업이 끝나면 자동으로 데몬 쓰레드도 종료된다
  • 쓰레드의 우선순위와 쓰레드 그룹
    • 쓰레드 우선순위
      • 작업의 중요도에 따라 우선순위를 부여할 수 있는데 순위가 높을수록 빠르게 처리된다
      • 최대 우선순위는 10, 최소는 1, 보통은 5이다
      • 기본 값은 보통 우선순위이다
      • 쓰레드의 우선순위는 setPriority()로 설정하고 getPriority()로 반환한다
      • 쓰레드의 우선순위가 높다고 반드시 먼저 종료되는건 아니다
    • 쓰레드 그룹
      • 기본적으로 System그룹에 포함된다
      • 메인 쓰레드는 main그룹에 포함된다
      • 모든 쓰레드는 하나의 그룹에 포함되어 있어야 한다
      • ThreadGroup 클래스로 객체를 만들어서 Thread 객체 생성 시 첫 번째 매개변수로 넣어주면 된다
      • ThreadGroup 객체의 interrupt() 메서드를 실행시키면 해당 그룹 쓰레드들이 실행대기 상태로 변경된다
    • 쓰레드 상태와 제어
      • 쓰레드 상태
        • 실행과 대기를 반복해 run() 메서드를 수행
        • run()이 종료되면 실행이 멈춘다 
    • sleep()과 interrupt()
      • sleep() : 현재 쓰레드를 지정된 시간 동안 멈추게 하고 자기 자신만 멈추게 할 수 있다
        • 사용 시 반드시 예외처리를 해야 한다
      • interrupt() : 일시정지 상태인 쓰레드를 실행대기 상태로 만든다

오늘의 회고

  • 개인프로젝트 제출이 끝나니까 긴장이 풀려서 그런지 평상시보다 집중력이 떨어진 거 같다
  • 내일부턴 팀프로젝트가 시작되어 남은 강의를 듣지 않으면 영영 못 듣게 될 거 같으니 얼른 강의를 다 들어야겠다
  • 아직 몸이 적응을 하지 못해서인지 감기기운도 있고 소화도 잘 안되고 그렇다