주 메뉴 열기

스레드(Thread)

라이언양 (토론 | 기여)님의 2019년 12월 27일 (금) 15:43 판 (새 문서: == 소개 == == 프로세스 == 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스(process)라고 부릅니다. 사용자가 애플리케이션을 실...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

목차

1 소개

2 프로세스

운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스(process)라고 부릅니다. 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 이것이 프로세스입니다.

3 멀티 태스킹

운영체제는 두 가지 이상의 작업을 동시에 처리하는 멀티 태스킹(multi tasking)을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당해주고 병렬로 실행시킵니다.

멀티 태스킹은 꼭 멀티 프로세스를 뜻하는 것은 아닙니다. 한 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션도 있습니다. 어떻게 하나의 프로세스가 두 가지 이상의 작업을 처리할 수 있을까요? 그 비밀은 멀티 스레드(multi thread)에 있습니다.

4 스레드

스레드(thread)는 사전적 의미로 한 가닥의 실이라는 뜻인데, 한 가지 작업을 실행하기 위해 순차적으로 실행할 코드를 실처럼 이어놓았다고 해서 유래된 이름입니다. 하나의 스레드는 하나의 코드 실행 흐름이기 때문에 한 프로세스 내에 스레드가 2개라면 2개의 코드 실행 흐름이 생긴다는 의미입니다.

멀티 프로세스는 운영체제에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 각 프로세스는 서로 독립적입니다. 따라서 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않습니다. 하지만 멀티 스레드는 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않습니다. 하지만 멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스 자첵 종료될 수 있어 다른 스레드에 영향을 미치게 됩니다.

5 메인 스레드

자바의 모든 애플리케이션은 메인 스레드(main thread)가 main() 메소드를 실행하면서 시작합니다. 메인 스레드는 main() 메소드의 첫 코드부터 아래로 순차적으로 실행하고, main() 메소드의 마지막 코드를 실행하거나 return 문을 만나면 실행이 종료됩니다.

메인 스레드는 필요에 따라 작업 스레드들을 만들어서 병렬로 코드를 실행할 수 있습니다. 즉, 멀티 스레드를 생성해서 멀티 태스킹을 수행합니다.

싱글 스레드 애플리케이션에서는 메인 스레드가 종료하면 프로세스도 종료됩니다. 하지만 멀티 스레드 애플리케이션에서는 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않습니다. 메인 스레드가 작업 스레드보다 먼저 종료되더라도 작업 스레드가 계속 실행 중이라면 프로세스는 종료되지 않습니다.

6 작업 스레드 생성과 실행

멀티 스레드로 실행하는 애플리케이션을 개발하려면 먼저 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드를 생성해야 합니다.

어떤 자바 애플리케이션건 메인 스레드는 반드시 존재하기 때문에 메인 작업 이외에 추가적인 병렬 작업의 수만큼 스레드를 생성하면 됩니다. 자바에서는 작업 스레드도 객체로 생성되기 때문에 클래스가 필요합니다. java.lang.Thread 클래스를 직접 객체화해서 생성해도 되지만, Thread 클래스를 상속해서 하위 클래스를 만들어 생성할 수도 있습니다.