반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

[취업/면접] thread란 무엇이고 thread를 구현하기 위한 인터페이스, 클래스는 어떤 것이 있나요? 본문

。*:・゚☆・゚schedule・゚*:・゚★・:*:・☆ *:・゚★/나의 면접 준비 자료 ✿˘◡˘✿

[취업/면접] thread란 무엇이고 thread를 구현하기 위한 인터페이스, 클래스는 어떤 것이 있나요?

yeonee 여니 2023. 10. 16. 23:23
728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

1. 스레드란?

스레드는 프로세스 내에서 실행되는 세부 작업의 단위입니다. 
스레드를 구현하기 위한 인터페이스는 Runnable이며, 클래스는 Thread입니다.

부엌에 비유하면 프로세스는 각각의 요리를 만드는 주방공간 1, 주방공간 2,... 같은 것이고,
스레드는 그 안에서 만들어지는 메뉴와 같은 것이라고 할 수 있습니다.

더보기

+ 참고 영상
https://www.youtube.com/watch?v=iks_Xb9DtTM

 

2. 프로세스란?

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

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

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

 

[ 프로세스 개념 ]

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

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번과 같이 쓰레드를 이용하여 동시에 처리하는 것이 처리시간이 더 짧은 것을 알 수 있습니다. 

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

 

+ 참조 포스팅

728x90
반응형
LIST