Java

싱글 쓰레드와 멀티 쓰레드

KJihun 2023. 5. 29. 16:12
728x90
싱글 쓰레드 

싱글 쓰레드란, 프로세스 안에서 하나의 쓰레드만 실행되는 것을 의미한다.

Main 메서드(public static void Main)만 실행시켰을 경우,  싱글 쓰레드라고 한다.

Java에서 Main 메서드를 실행하는 쓰레드를 메인 쓰레드 라고 한다.

JVM의 메인 쓰레드가 종료되면 JVM도 같이 종료된다.

 

멀티 쓰레드 

멀티 쓰레드란, 프로레스 안에서 여러개의 쓰레드가 실행되는 것을 말한다.

하나의 프로세스는 여러개의 쓰레드를 가질 수 있으며, 이 쓰레드들은 프로세스의 자원을 공유한다

Java의 프로그램은 메인 쓰레드 외에 다른 작업 쓰레드들을 생성하여 여러개의 실행흐름을 만들 수 있다.

 

멀티 쓰레드의 장점

여러개의 작업을 동시에 수행함으로써 성능이 향상된다.

스택을 제외한 모든 영역에서 메모리를 공유하기 때문에 자원을 효율적으로 사용할 수 있다.

응답 쓰레드와 작업 쓰레드를 분리하여 빠르게 응답할 수 있다(비동기)

 

멀티 쓰레드의 단점

프로세스의 자원을 공유하며 작업하기에 자원을 서로 사용하려고 하는 충돌(동기화) 문제가 발생할 수 있다.

교착상태(DeadRock)가 발생할 수있다

교착상태란 두 개 이상의 작업이 상대방의 작업이 끝나기 기다려 결과적으로 아무것도 완료되지 못하는 상태를 뜻한다.

 

  • 교착상태의 해결방법
    • 예방 기법(Prevention) : 아래 조건 중 하나라도 미충족 시 교착상태가 발생하지 않음.
      1. 상호 배제(Mutual Exclusion) : 한번에 한개의 프로세스만이 공유 자원을 사용할 수 있어야 한다
      2. 점유와 대기(Hold and Wait) : 자원을 가지고 있는 상태에서 다른 프로세스가 사용하고 있는 자원의 반납을 기다리는 것
      3. 비선점(Non-Preemption) : 다른 프로세스에 할당된 자원은 강제로 뺏을 수 없어야 한다
      4. 환형 대기(Circular Wait) : 원형 구조로 구성되어 있어 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다
    • 회피 기법(Avoidance) : 은행원 알고리즘(Banker's Algorithm) 사용
      1. 자원 요청: 프로세스가 자원을 요청할 때 시스템은 해당 요청이 안전한지 검사합니다.
      2. 자원 할당: 시스템은 안전 상태에서만 자원을 할당합니다.
      3. 자원 반납: 프로세스가 자원을 사용한 후 반납할 때 시스템은 안전 상태를 유지합니다. 
    • 발견 기법(Detection) : 교착상태가 발생했는지 점검하여 교착상태가 발생한 자원을 발견하는 것
    • 회복 기법(Recovery)
      • 교착상태를 일으킨 프로세스를 종료
      • 교착상태 프로세스의 자원을 뺏은 후 해결될 때 까지 다른 프로세스에 할당