본문 바로가기
자바과정/Java

쓰레드(Thread)란

by Parkej 2021. 10. 7.

#출처 및 참고

(본 글은 이론적인 내용들을 위주로 포스팅했습니다. )

쓰레드란 무엇인가

 

먼저 프로세스(process)의 정의를 보겠습니다.

 

단순히 실행 중인 프로그램

? 그러니까 지금 제가 카카오톡 PC 프로그램을 실행하고 있는데 이것을 프로세스라고 한다고요? 

네 맞더라고요 

 

간단하게 작업관리자를 키면 구동중인 프로그램들을 볼 수 있습니다. 그래서 저 말이 틀린것이 아닙니다. 

좀 더 전문적이게 알아보자면 

 

사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 

 

오호 근데 왜 쓰레드 얘기를 하면서 프로세스를 말하시나요 라고 한다면 프로세스 안에 쓰레드가 존재하기 때문이라고 답할 수 있습니다. 

 

그러니까 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성이 됩니다. 

 

CPU를 예를 들어

( 이렇게 컴퓨터를 구성하는 하드웨어 중 CPU를 아시나요 CPU는 코어와 쓰레드로 구성되어 있습니다. 제꺼 엄청 오래되었죠 무려 13년도산 노트북이랍니다. 지금 산소호흡기를 붙여가며 연명중이에요 )

 

본론으로 들어가서 프로세스는 자원과 스레드로 구성이 되고 우리가 알고자하는 스레드는 무엇일까요 ??

 

* 프로세스 요약

- 어떤 작업을 위해 실행할 수 있는 파일

1. 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램

2. 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) 

스레드(thread)

프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 

- 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다.

- 또 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다. 

- 프로세스 내에서 실행되는 여러 흐름의 단위 

 

자바에서는 JVM 메모리 영역들 중 스택 메모리와 PC 레지스터, 네이티브 메소드 스택 영역은 각각의 쓰레드에 국한된다고 말합니다. 이게 뭔소리인가 싶어 계속 알아보는 중인데 

 

이번에 스레드라는 개념을 이해하면서 명확하게 짚어볼까 합니다. 

 

우선 위의 사전적의미를 살펴보면 스레드는 결국 프로세스 즉, 프로그램 내에서 실행되는 흐름의 단위라는 것을 의미합니다. 도대체 무슨말일까요 프로그램을 실행하는 작업을 스레드 단위라고 표현해야 할까요 ? 

 

자바에서 스레드는 이렇습니다. 

- 일반 스레드와 거의 차이가 없고 JVM이 운영체제의 역할을 합니다.

- 자바에는 프로세스가 존재하지 않고 스레드만 존재합니다. 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록입니다.

- 자바에서 스레드 스케줄링은 전적으로 JVM에 이루어집니다. 당연한 얘기입니다. 자바는 JVM에 의해 실행되는것이기 때문이죠 

- 이런 스레드 관련된 많은 정보들도 JVM이 관리합니다. 

 1. 스레드가 몇 개 존재하는가

 2. 스레드로 실행되는 프로그램 코드의 메모리 위치는 어디인가

 3. 스레드의 상태는 무엇인가

 4. 스레드의 우선순위는 얼마인가

 

 - 즉, 우리같은 자바 개발자는 자바 스레드로 작동할 스레드 코드를 작성하고 스레드 코드가 생명을 가지고 실행을 시작하도록 JVM에 요청하는 일 뿐입니다. 

 

자바에서 스레드를 사용하는 클래스는 Runnable과 Thread가 있죠. 이것을 가지고 채팅프로그램도 구현이 가능합니다. 

 


 

자 우리가 사용하는 OS는 멀티OS 라고 말합니다. 동시에 여러 가지 작업을 할 수 있다는 것이죠.

 

예시를 들어

 - 음악들 들으며 카카오톡 PC에서 채팅을 하면서 웹 서핑을 한다. 이 때 각각의 응용 프로그램은 하나의 프로세스를 갖습니다. 

* 음악을 듣는것과 카카오톡 PC에 채팅을 하는것, 웹 서핑을 하는것도 각각 하나의 프로세스입니다. 

 

반면 스레드는 프로세스를 여러 개로 나눈 조각과 갖다고 말할 수 있습니다. 무슨말이냐

카카오톡 채팅을 보겠습니다. 카톡에서 채팅을 입력하는동안 다른사람들이 보내는 메세지들이 표시됩니다. 실시간으로 말이죠. 그리고 입력을 다 끝내면 전송하기 버튼을 통해 메세지를 전송하고 .. 등등,, 이렇게 내가 채팅 메시지 입력을 하는 동안 실행되는 일련 작업들이 쓰레드에 의해 이루어지는 겁니다. 

글자를 입력받는 쓰레드와 채팅을 수신받을 화면 쓰레드 등등의 쓰레드들이 존재합니다. 

 

즉, 카카오톡 PC 라는 프로세스 하나에 여러 개의 쓰레드가 모여있는 것입니다. 

 

실제로 프로세스는 하나의 주소 공간을 가지고 있고 모든 응용 프로그램들은 메인 응용 프로그램을 위한 하나의 쓰레드를 갖습니다. 물론 여기에 다른 쓰레드들이 함께 수행될 수 있고, 각각의 쓰레드들은 자신을 관리하는 프로세스의 주소를 갖고 있습니다. 

 

즉, 프로세스는 쓰레드에 대한 일종의 컨테이너 역할을 합니다. 

 

그럼 스레드는 왜 사용하는 건가요 ? 라고 물으실 수 있습니다. 

스레드는 하나의 프로그램에서 한 번에 하나의 일을 처리하는게 아닌 동시에 많은 일을 처리할 수 있다는 장점이 있습니다. 

예를 들어 카카오톡 PC 프로그램을 사용한다고 생각하면 채팅방에서 내가 썸녀에게 답장을 보내고 상대방이 답장오기까지 입력도 못하고 무작정 기다려야하는 것은 말이 안됩니다. 답장이 1분이 걸릴 수도 1년이 걸릴수도 있으니까요 (주륵) 그저 눈물만 나겠죠 ? , 이렇게 내가 전송 작업을 완료하고 추가로 보낼 말을 입력하고 동시에 상대방의 답장을 받는다. 이런것이 스레드의 장점이라고 볼 수 있습니다. 단톡방을 생각하면 이해가 훨씬 쉬울겁니다. 

 

OS 같은 경우는 멀티 태스킹과 멀티 프로세싱을 지원합니다. 

멀티 프로세싱 : 여러 개의 프로세스를 사용하는 것.

멀티 태스킹 : 같은 시간에 여러 개의 프로그램을 띄우는 것.

 

즉, 같은 일을 더 빠른 시간안에 처리할 수도 있고 처리 시간이 오래 걸리는 작업에 대해 쓰레드에게 처리를 맡기고 다른 일을 계속해서 처리할 수도 있는 것입니다. 

 

 

위 그림은 좋은 블로그에서 퍼왔는데요 한 번 보겠습니다. 

1번은 일련의 3개 작업을 순차적으로 실행합니다. 

2번은 일련의 3개 작업을 동시에 실행합니다. 

 

딱 봐도 보이시나요? 2번과 같이 쓰레드를 이용하여 동시에 처리하는 것이 처리시간이 더 짧은 것을 알 수 있습니다. 

 

즉, 많은 동시 사용자를 처리하는 환경이나 한 번에 많은 작업을 처리하는 응용 프로그램에서 그 위력을 발휘할 것입니다. 

 

 

요까지 알아봤는데요 배웠지만 용어가 생각이 안나거나 의미가 생각이 안난 상태로 왜 쓰는가?를 보완하려고 포스팅했습니다. 

 

다음에는 자바 스레드를 이용하여 실습을 해볼 예정입니다. 

반응형

'자바과정 > Java' 카테고리의 다른 글

Java 클래스 로더(ClassLoader)  (0) 2021.10.04
JVM의 구조  (0) 2021.10.04
JVM과 JDK와 JRE  (0) 2021.09.23
객체 지향 프로그래밍 5원칙 (SOLID)  (0) 2021.09.09
객체 지향 프로그래밍 4대 특징 (코드 실습)  (0) 2021.09.09

댓글