Thread

주빈·2022년 8월 7일
0

java

목록 보기
3/6
post-thumbnail

항상 공부하다 보면 스레드 스레드 얘기가 많은데 오늘은 스레드에 대해 알아보자.

일단 프로세스에 대해서 알아보자.

📘 Process란?

  • 프로세스(process)란 단순히 실행중인 프로그램이라고 할 수 있다.
  • 즉, 사용자가 작성한 프로그램이 운영체제에 의해서 메모리 공간을 할당받아 실행 중인 것을 말한다.
  • 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성이 된다.

📘 Thread란?

  • 스레드(thread)란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
  • 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다.
  • 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다.

📜 Thread를 사용하는 이유

그래서 스레드는 왜 사용하는 것일까??? 3가지의 이유가 있다.

✏ 메모리 절약

운영체제(OS)마다 다르지만, 무슨 작업을 수행하려고 할 때 JVM은 적어도 32 ~ 64MB 물리 메모리를 점유한다고 한다.
근데 스레드는 1MB 이내의 메모리만 점유한다. 그래서 스레드를 '경량 프로세스'라고도 부른다.

✏ 오버헤드 절감

멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행하게 되면 프로세스를 생성하여 자원을 할당하는 과정도 줄어들고 프로세스를 콘텍스트 스위칭(Context Switching)하는 것보다 오버헤드를 더 줄일 수 있게 된다.

참고

콘텍스트 스위칭이란?

운영체제(Operating System)의 스케줄러(Scheduler)가 인터럽트(Interrupt)를 진행하여 더 높은 우선순위를 가진 프로세스가 실행되어야 할 때, 스케줄러가 레지스터(Register)에 저장된 기존 프로세스 정보 값이나 기존 프로세스 상태 값을 커널(Kernal) 내부에 존재하는 PCB(Process Control Block)에 저장하고, 새 프로세스의 정보 값이나 새 프로세스 상태 값을 PCB에서 다시 가져와 교체하는 작업이다.

✏ 작업들 간의 통신 비용 절감

프로세스 간의 통신 비용보다 하나의 프로세스 내에서 여러 스레드 간의 통신 비용이 훨씬 적으므로 작업들 간의 통신 부담을 줄일 수 있게 된다.


📜 스레드와 프로세스의 차이점

프로세스는 완벽히 독립적이기 때문에 메모리 영역을 다른 프로세스와 공유를 하지 않지만
스레드는 해당 스레드를 위한 스택을 생성할 뿐만 아니라 프로세스 내의 메모리를 공유해서 사용할 수 있다.

[출처] https://mooneegee.blogspot.com/2015/01/os-thread.html


📜 스레드의 상태

아래의 각 스레드 상태들이 JVM에 의해서 생성/관리된다.


[출처] https://velog.io/@ruthetum/JAVA-Thread-Multitasking

profile
누구에게나 필요한 개발자가 꿈

0개의 댓글