UpDown Dev Story
자바(Java) 스레드(Thread) 에 대해 알아보자 본문
목적
자바에서 Process와 Thread에 대해 알아보고 기록하기 위해서 작성했습니다
프로세스란?
- 프로그램의 실행의 단위
- 자바프로그램에서 JVM이 시작되면 자바 프로세스가 시작한다
- 실행 중인 프로그램을 뜻하고 프로그램을 실행하면 OS(JVM)로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다
- 프로세스는 각각 메모리 영역을 할당받기 때문에 다른 프로세스의 변수나 자료에 접근할 수 없다
프로세스가 할당받은 메모리 영역
쓰레드란?
- 프로그램의 작업의 단위
- 프로세스는 쓰레드가 하나 이상 수행된다
- 프로세스의 자원을 이용해서 작업을 수행하는것
- 하나의 프로세스안에 여러개의 쓰레드가 존재하기 때문에 프로세스안에 있는 메모리 영역을 쓰레드끼리 공유한다
쓰레드 메모리 공유 예시
자바 프로세스 쓰레드 실행과정
- java 클래스를 실행시키는 순간 자바 프로세스가 시작이되고 main() 메소드가 수행되면서 하나의 쓰레드가 시작된다
여기서 많은 쓰레드가 필요하다면 main()메소드 안에 여러개의 쓰레드를 생성해 주면 된다
그냥 프로세스 여러개 띄우면 안되나? 왜 쓰레드가 필요할까?
- 프로세스를 하나 시작하려면 많은 자원이 필요하다 (만약 하나의 작업을 동시에 수행하려고 할 때 여러 개의 프로세스를 띄워서 실행하면 각각 메모리를 할당하기 때문에 비효율적이다
- JVM은 기본적으로 아무런 옵션 없이 실행하면 OS마다 차이는 있지만 적어도 32MB~64MB의 물리 메모리를 점유한다
그에 비해 쓰레드를 하나 추가하면 1MB 이내의 메모리를 점유한다 그래서, 쓰레드를 경량 프로세스 라고도 부른다 - 쓰레드는 자원을 공유하기 때문에 효율적이다
- process 는 자원을 공유하지 않기 때문에 context switching 쓰레드에 비해 효율이 떨어진다
프로세스와 스레드의 차이 정리 표
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 (인터럽트 처리를 기다릴 때 = 요청 후 완료를 기다릴때 제어권을 넘겨주는 것)
'Java' 카테고리의 다른 글
자바(Java) 직렬화(Serializable) 대해 알아보자 (0) | 2021.07.10 |
---|---|
자바(Java) 컬렉션(Collection)에 대해 알아보자 (0) | 2021.07.09 |
자바(Java) 에러(Error) 와 예외(Exception)에 대해서 알아보자 (0) | 2021.07.08 |
자바의신 정리해봅시다 Volume 2 (21장 ~ 28장) (4) | 2021.06.29 |
자바의신 정리해 봅시다 Volume 1 (11장~20장) (2) | 2021.06.29 |
Comments