Study

[JAVA] Process(프로세스)와 Thread(스레드)

jeonniu 2022. 6. 1. 19:52

스레드에 대한 설명 전에 프로세스에 대해 알아보자.
프로세스(Process)는 간단히 말해 실행중인 프로그램을 의미한다. 

프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 프로세스가 된다.
프로세스의 구성 요소는 다음과 같다.

프로세스 구성도

프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원과 스레드로 구성되어 있다.

 

 

 

스레드(Thread) 란?

하나의 프로세스 내부에 독립적으로 실행되는 하나의 작업 단위

 

스레드 구성도

모든 프로세스에는 최소 1개 이상의 스레드가 존재하며,

둘 이상의 스레드를 가진 멀티 스레드 프로세스(Multi Thread Process) 라고 한다. 

 

멀티 스레드 프로세스는 멀티 스레딩이 가능하다.

 

 

멀티 스레딩(Multi Threading) 이란?

하나의 프로세스 내에 여러 스레드가 동시에 작업을 수행하는 것

 

실제로 1개의 CPU는 한 번에 한 가지의 작업만 수행할 수 있지만,스레드가 짧은 시간 동안 여러 작업을 동시에 번갈아 수행함으로써 멀티 스레딩을 하는 것처럼 보이는 것이다.

 

 

• 멀티 스레딩의 장점

- CPU의 사용률을 향상시킨다.

- 자원을 효율적으로 사용할 수 있다.

- 사용자에 대한 응답성이 향상된다.

- 작업이 분리되어 코드가 간결해진다.

 

• 멀티 스레딩의 단점

- 전체 프로세스에 영향을 줄 수 있다.

- 성능 저하가 동반된다.

- 동기화 문제[각주:1]에 주의해야 한다.

- 교착 상태[각주:2]가 발생하지 않도록 주의해야 한다.

 

 

 

 

스레드(Thread)의 생성 주기

 

스레드의 생성 주기

 


1. New상태

- 객체를 생성한다.
- 스레드가 만들어진 상태로 아직 start() 메소드가 호출되지 않았다.


2. Runnable(실행대기)상태
- 스레드 실행을 위한 준비 단계이다.
- 코드 상에서 start() 메소드를 호출하면 run() 메소드에 설정된 쓰레드가 Runnable 상태로 진입한다.


3. Running(실행)상태
- CPU를 점유하여 실행되고 있는 상태이다.
- Runnable 상태에 있는 여러 스레드 중 우선 순위를 가진 스레드가 결정되면,
- JVM이 자동으로 run() 메소드를 호출하여 스레드가 Running 상태로 진입한다.


이 때 , run() 메소드는 JVM만이 호출할 수 있다.


4. Terminated(실행종료)상태
- Running 상태에서 스레드가 모두 실행되고 난 후, 완료된 상태이다.
- run() 메소드 사용을 완료시 스레드가 종료되며, 해당 스레드는 재시작할 수 없다.


 5. Blocked(일시정지)상태
- 사용하고자 하는 객체의 LOCK이 풀릴 때까지 기다리는 상태이다.
- wait() 메소드에 의해 BLOCKED 상태가 된 스레드는 notify() 메소드가 호출되어야 다시 Runnable 상태로 간다.
- sleep() 메소드에 의해 BLOCKED 상태가 된 스레드는 지정된 시간이 지나면 다시 Runnable 상태로 간다.

 

++

  • Single Thread Code ex (Thread 클래스 상속)
  • Single Thread Code ex (Runnable 인터페이스 상속)
  • Multi Thread ex(1)
  • Multi Thread ex(2)
  1. 스레드 간에 함께 공유하는 전역변수를 동시에 사용할 때 발생하는 충돌 현상 [본문으로]
  2. 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태 [본문으로]