Java & Spring Boot

OS, Process, Thread

향각산 2020. 10. 8. 17:45

1. OS, 프로세스 (Process)

내가 다운받은 애플리케이션(exe 등)은 디스크에 저장된 상태다.

핸드폰 앱처럼 실행하기전에는 동작하지 않음.

 

애플리케이션을 실행하면 OS로부터 메모리를 할당받아서 프로세스가 된다.

즉 프로세스는 실행 중인 애플리케이션 (프로그램) 이다.

 

중요한 것은 CPU의 코어당 단 하나의 작업만 실행할 수 있다.

 

현재 내 컴퓨터의 CPU는 8-Core이다. 이러면 멀티 프로세싱이 되는것이다.

멀티 프로세싱은 cpu 코어가 많아서 한번의 여러개의 프로세스를 처리하는 것이다.

 

 

그러나 작업 관리자에서 보여지는 프로세스는 대충봐도 8개가 넘는다.

이러한 동작이 가능한 이유는 바로 대부분의 OS가 멀티 태스킹을 지원하기 때문이다.

멀티 태스킹(Multi-tasking)이란 ?

태스크(Task)란 OS가 자원을 할당하여 요청을 처리하는 단위다.

OS가 프로세스를 동작시키기 위한 하나의 작업 단위라고 보면 편한 것 같다. (개인적인 생각)

 

만약 사용자가 여러가지 업무를 순차적으로 요청했을때 OS는 여러개의 태스크를 받은 것이 된다.

이때 task를 OS 스케쥴링을 이용하여 효율적으로 동작하는 것을 멀티 태스킹이라고 한다.

 

사람이 오늘 할일을 받아서 계획을 세우고 계획대로 일을 하는것이라 생각하면 편하다.

컴퓨터가 오늘이라는 단위가 매우 짧고 동작이 매우 빠른것일뿐.

 

어쨋든 오랜기간 발전해온 OS가 매우 효과적으로 작업 일정을 관리하며 빠른속도로 일처리를 진행하여 사람눈에는 한번에 여러가지 일을 처리하는것으로 보인다.

이게 바로 멀티 태스킹이다.

2. 프로세스와 쓰레드(Thread), 멀티쓰레드

그렇다면 쓰레드란 무엇인가?

 

쓰레드는 프로세스가 일을 처리할때 사용하는 실행 단위이다.

 

그냥 조금 느슨하게 제멋대로 이야기한다면 OS가 프로세스를 처리하기 위해 태스크라는 작업단위를 사용한다면, 프로세스는 실제 작업들을 진행하기 위해 쓰레드라는 태스크(작업단위)로 일을 한다.

 

여기서 끝이 아니라 프로세스는 쓰레드를 또 멀티로 분리해서 사용한다.

 

맨 위에 내가 다운받은 애플리케이션이 하나의 프로세스가 된다고 말했는데, 그 애플리케이션이 느리면 아무도 사용하지 않을 것이다.

그래서 그 안에서도 멀티로 분리해서 작업효율을 높인다.

이렇게 되면 카카오 애플리케이션 내에서 사진을 다운받으면서 채팅을 칠 수 있는것이다.

 

 

이 지식들을 알아야 하는 이유가 무엇인가?

대부분 애플리케이션을 멀티 쓰레드가 잘 동작하도록 코드를 짜기 때문이다.

 

하나의 애플리케이션을 여러 개의 프로세스로 분리해서 멀티 태스킹을 시키는게 아니고, 하나의 프로세스로 집약해서 사용하기 때문에 쓰레드를 아는것은 필수이다.

 

멀티 프로세스보다 멀티 쓰레드를 이용하는 이유는 ?

  1. OS가 프로세스에 자원할당하는 시간이 쓰레드가 멀티로 동작하는것보다 비효율적이다.
  2. 쓰레드는 이미 프로세스에 할당된 메모리를 공유하기 때문에 쓰레드끼리 통신이 잘된다.
  3. 이쪽 전문가가 아니니까 OS의 범위는 크기 때문에 추가로 공부할 것...

갑자기 쓰레드의 개념에 대하여 포스트하는 이유

Spring에서 spring.task.execution으로 비동기 메소드를 사용하는 중이다.

여기에는 디테일하게 값을 설정할 수 있는게 있다.

근데 대충 queue-capacity 10000, core-size 2, max-size 50 해놨는데 에러뜸

에러가 나지 않게 최대한 많은 양의 데이터를 처리하기 위해서 얼마만큼의 자원을 할당할 수 있는지 몰라서 공부중에 작성함.

 

 

잘못된 내용이 존재할 수 있음.

'Java & Spring Boot' 카테고리의 다른 글

QueryDSL 서브쿼리 Sort 적용  (0) 2021.10.12
Unknown lifecycle phase ".test.skip=true".  (0) 2021.09.30
Java -jar 커맨드 명령어  (0) 2020.09.11
H2 In-Memory 사용법  (0) 2020.06.15
extends와 implements  (0) 2018.12.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함