[백엔드] 동기화/동시성 문제(한 작업에 대한 병렬처리) 해결을 위한 개념4 - 스레드를 관리하기 위한 기본 개념(데몬스레드, 스레드그룹 등)

Hyo Kyun Lee·3일 전
0

백엔드

목록 보기
15/16

1. 개요

기본적으로 스레드를 활용하고 관리하기 위해 필요한 개념들을 공부하여 정리한 글이다.

2. 데몬스레드

데몬스레드는 우선순위가 낮아 보이지 않는 곳에서 실행되는 스레드를 의미하는데, 1차적으로 메인스레드 실행 완료 후 필요 시 데몬스레드가 실행된다.

JVM 및 애플리케이션 종료는 메인스레드의 종료 시점에 따라 달라지는데, 데몬스레드는 이와 상관없으며 역으로 애플리케이션 측에서 강제종료 할 수 있다.

  • 가장 대표적인 데몬스레드는 가비지 컬렉터가 있다.

우선순위가 낮다는 의미는 다음과 같은 현상을 수반한다.

  • 동일한 프로세스라도 자원을 적게 할당 받고 느리게 실행된다.
  • 데몬스레드와 메인스레드가 동시에 실행 중인 상태에서 메인스레드 종료 시, 데몬스레드의 종료를 기다리지 않고 애플리케이션은 실행 종료된다.
  • 데몬스레드는 실행시점을 직접 명시해주어야 하는데, 메인스레드가 실행되지 않거나 데몬스레드 실행시점을 지정해주지 않는다면 데몬스레드는 실행자체가 되지 않는다.
Runnable daemon = () -> {
			for(int i = 0 ; i < 10000 ; i++){
		    	System.out.println("daemon! " + i);
		    }
		};

		Thread thread = new Thread(daemon);
		thread.setDaemon(true);
		thread.start();

		for(int i = 0 ; i < 100 ; i++){
			System.out.println("task! " + i);
		}
}

3. 사용자스레드

메인스레드, 높은 우선순위를 가진 스레드이며 JVM은 메인스레드(사용자스레드) 작업 종료 시 데몬스레드를 강제로 종료한다.

4. 스레드 우선순위

멀티스레드 환경에서 스레드의 작업 중요도에 따라 스레드 우선순위를 부여할 수 있다.

스레드 중요도가 높을 수록 그만큼 더 많은 작업시간과 자원을 할당받은 상태로 처리를 진행할 수 있으며, JVM 혹은 사용자 직접 지정을 통해 설정할 수 있다.

보통 우선순위는 최대/최소/보통 우선순위로 나타낼 수 있다(높을수록 우선순위가 높다).

  • 최대우선순위 : MAX_PRIORITY = 10(JVM 지정순위)
  • 최소우선순위 : MIN_PRIORITY = 1
  • 보통우선순위 : NORM_PRIORTY = 5

스레드의 우선순위는 setPriorty() 메서드를 통해 지정할 수 있고, getPriorty()를 통해 확인할 수 있다.

스레드의 우선순위가 높다고하여 빨리 종료되는 것은 아니지만, 할당 자원이나 처리 시간을 더 많이 가져가므로 그럴 가능성이 높다고 할 수 있겠다.

5. 스레드 그룹

스레드 그룹은 스레드를 관리하는 상위 관리 체계의 개념이며, 최초 실행 시 JVM은 system 스레드 그룹을 생성하여 메인스레드를 생성 및 처리 시작한다.

모든 스레드는 반드시 하나의 스레드 그룹에 포함되어야 하며, 스레드 그룹을 지정하지 않는다면 자동으로 main 스레드에 종속된다.

보통 스레드를 일시정지한다는 것은 스레드그룹에서 스레드에게 interrupt를 발생시키는 개념으로, 스레드그룹에서 스레드를 통제하는 것을 의미한다.

0개의 댓글

관련 채용 정보