• [JAVA/자바] 자바의 멀티스레딩

    2023. 6. 6.

    by. 개발도비

    자바의 멀티스레딩

    멀티스레드와 자바 가상 기계(JVM)  

    : 자바에는 프로세스(Process)가 존재하지 않고 스레드 개념만 존재하며, JVM은 멀티스레딩만 지원한다. 자바 스레드(java thread)는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다.

     

    JVM은 하나의 자바 응용프로그램만 실행 가능

    하나의 JVM은 하나의 자바 응용프로그램만 실행한다. 사용자가 자바 응용프로그램을 실행시키면, JVM이 먼저 실행되고 JVM이 자바 응용프로그램을 로딩하여 실행시킨다. 자바 응용프로그램이 종료되면 JVM도 함께 종료된다. 만약 한 컴퓨터에서 n개의 자바 응용프로그램이 실행된다고 하면 n개의 JVM이 실행되고 있는 것이다. 이들 각 자바 응용프로그램은 별개의 메모리 영역에서 독립적으로 실행된다. JVM은 멀티스레딩을 지원하며 자바 응용프로그램은 하나 이상의 스레드를 생성할 수 있다 

     

    두 개의 자바 응용프로그램이 실행되는 방법

    2개 이상의 자바 응용프로그램을 실행하고자 하는 경우는 위의 그림과 같이 실행되어야 한다. 위의 그림은 2개의 자바 응용프로그램이 각각 JVM에 의해 실행되며, 서로 정보를 주고받고자 하는 경우 소켓 통신과 같은 통신 방법을 이용한다.

     

    자바 스레드와 JVM

    : 자바 스레드는 다른 운영체제의 스레드와 크게 다르지 않다. 응용프로그램 개발자 입장에서 스레드를 만들기 위해서는 스레드로 실행될 프로그램 코드를 작성해야 한다. 이 프로그램 코드를 JVM에 스레드로 등록하는 간단한 절차를 마치면 새로운 스레드가 탄생한다.

     그 후부터 스레드 코드를 실행시키고, 잠깐 중단시키기도 하는 등의 스레드 스케줄링은 전적으로 JVM에 의해 이루어진다. 스레드가 몇 개 존재하는지, 스레드로 실행되는 프로그램 코드의 메모리 위치는 어디인지, 스레드의 상태는 무엇인지, 스레드의 우선순위는 얼마인지 등의 정보들도 JVM이 관리한다. 개발자가 할 일은 자바 스레드로 작동할 스레드 코드를 작성하고, 스레드 코드가 생명을 가지고 실행을 시작하도록 JVM에게 요청하는 것 뿐이다. 스레드를 관리하는 일은 모두 JVM의 몫이기 때문이다.

     

    4개의 자바 스레드로 구성된 응용프로그램을 실행하는 JVM

    위의 그림은  자바 응용프로그램, 스레드 코드, JVM, 스레드 정보와의 관계를 보여준다. 그림에서 자바 응용프로그램은 4개의 스레드를 생성한 상태이다. 스레드가 생성되면 스레드에 관련된 정보(Thread Control Block, TCB)가 생성되며 이들은 모두 JVM에 의해 관리된다. TCB 정보를 토대로 어떤 스레드를 실행시킬지를 결정하는 스케줄링은 JVM에 의해 이루어진다. 만약 JVM이 스레드2를 선택하면 2번째 TCB에 기록된 스레드2의 코드 주소에서 실행을 시작한다. 위의 그림은 JVM이 스레드2를 선택하여 스레드2의 코드가 실행되고 있는 상태이다. 스레드가 종료되면 해당 TCB는 사라진다. 모든 스레드가 종료되면 JVM이 종료되고 자바 응용프로그램도 종료된다. 

    댓글