Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

UpDown Dev Story

자바(Java) 스레드(Thread) 에 대해 알아보자 본문

Java

자바(Java) 스레드(Thread) 에 대해 알아보자

updown 2021. 7. 8. 15:55

목적

자바에서 Process와 Thread에 대해 알아보고 기록하기 위해서 작성했습니다

프로세스란?

  • 프로그램의 실행의 단위
  • 자바프로그램에서 JVM이 시작되면 자바 프로세스가 시작한다
  • 실행 중인 프로그램을 뜻하고 프로그램을 실행하면 OS(JVM)로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다
  • 프로세스는 각각 메모리 영역을 할당받기 때문에 다른 프로세스의 변수나 자료에 접근할 수 없다

프로세스가 할당받은 메모리 영역

출처https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

쓰레드란?

  • 프로그램의 작업의 단위
  • 프로세스는 쓰레드가 하나 이상 수행된다
  • 프로세스의 자원을 이용해서 작업을 수행하는것
  • 하나의 프로세스안에 여러개의 쓰레드가 존재하기 때문에 프로세스안에 있는 메모리 영역을 쓰레드끼리 공유한다

쓰레드 메모리 공유 예시

자바 프로세스 쓰레드 실행과정

  • java 클래스를 실행시키는 순간 자바 프로세스가 시작이되고 main() 메소드가 수행되면서 하나의 쓰레드가 시작된다
    여기서 많은 쓰레드가 필요하다면 main()메소드 안에 여러개의 쓰레드를 생성해 주면 된다

그냥 프로세스 여러개 띄우면 안되나? 왜 쓰레드가 필요할까?

  • 프로세스를 하나 시작하려면 많은 자원이 필요하다 (만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당하기 때문에 비효율적이다
  • JVM은 기본적으로 아무런 옵션 없이 실행하면 OS마다 차이는 있지만 적어도 32MB~64MB의 물리 메모리를 점유한다
    그에 비해 쓰레드를 하나 추가하면 1MB 이내의 메모리를 점유한다 그래서, 쓰레드를 경량 프로세스 라고도 부른다
  • 쓰레드는 자원을 공유하기 때문에 효율적이다
  • process 는 자원을 공유하지 않기 때문에 context switching 쓰레드에 비해 효율이 떨어진다

프로세스와 스레드의 차이 정리 표

출처: https://shoark7.github.io/programming/knowledge/difference-between-process-and-thread

Context Switching이란?

  • 멀티 프로세스 또는 쓰레드 환경에서 CPU가 어떤 하나의 프로세스 또는 쓰레드를 실행하고 있는 상태에서, 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때, 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)으로 교체하는 작업을 컨텍스트 스위칭 이라고 한다.

Context란

  • CPU가 해당 프로세스, 쓰레드를 실행하기 위한 해당 프로세스의 정보들.
  • 프로세스는 이 Conext 정보가 PCB(Process Control Block) 쓰레드는 TCB(Thread Control Block)에 저장된다

인터럽트(Interrupt)란

  • 인터럽트는 CPU가 프로그램을 실행하고 있을 때 실행중인 프로그램 밖에서 예외 상황이 발생하여 처리가 필요한 경우 CPU에게 알려 예외 상황을 처리할 수 있도록 하는 것을 말한다.

그렇다면 인터럽트 요청이 와야 Context Switching이 일어날까?

  • I/O request (입출력 요청할 때)
  • time slice expired (CPU 사용시간이 만료 되었을 때)
  • fork a child (자식 프로세스를 만들 때)
  • wait for an interrupt (인터럽트 처리를 기다릴 때 = 요청 후 완료를 기다릴때 제어권을 넘겨주는 것)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments