본문 바로가기

IT/이론

[프로세스 vs 스레드 - 1] 프로세스와 스레드

반응형

서  론

아이언맨이 보고 있는 UI는 매우 많은 스레드가 돌아가고 있을 것이다.

위 그림에서 토니 스타크가 입은 아이언맨 수트에서 펼쳐진 UI(유저 인터페이스)인데,

(아마 필자의 예상이지만) 저 원 하나하나마다, 정보 하나하나마다 각각이 스레드로 돌아가고 있을 확률이 매우 높다.

 

아마 실시간성을 위해서 C++로 짰거나 JAVA로 짜지 않았을까...

 

프로세스와 스레드에는 여러 별명이 있다.

 

대기업 면접 제 1 질문,

OS(운영체제) 가장 중요한 질문,

등등.

 

그렇다면 왜 대기업에서 면접마다 프로세스와 스레드에 대한 질문을 하는 것일까?

 

N사의 면접에서는 <프로세스와 스레드의 차이점>을 묻고,

꼬리 질문으로 <멀티프로세스와 멀티스레딩의 차이점 및 속도는 무엇이 더 빠를까?>를,

다음 꼬리 질문으로 <파이썬의 멀티스레딩과 자바의 멀티스레딩은 무엇이 다를까?>를,

그 다음 꼬리 질문으로 <IPC는 무엇이고 어떤 것을 써보았나?>를,

그 그 다음 꼬리 질문...

 

이런 식으로 프로세스와 스레드에 대해 무한정으로 깊게 파고 들어갔다.

필자가 모르겠다는 답변이 나올 때까지.

 

그 정도로 기업에서 바라보는 프로세스와 스레드의 중요성은 하늘을 찌른다.

 

비단 백엔드, 모바일 뿐만이 아니라 (이쪽은 멀티스레딩이 기본이다)

임베디드조차도 실무에서는 멀티스레딩을 자주 사용한다.

 

임베디드 리눅스는 말할 것도 없고,

MCU를 이용한 펌웨어 개발에서도 FreeRTOS 등을 이용해서 멀티스레딩을 채용한다.

 

우리는 그 중요한 프로세스와 스레드에 대해서,

시리즈를 통해 차근차근 배워나갈 것이다.


프로세스와 스레드 기본 - 1

 

반응형

위 그림은 프로세스와 스레드를 단언컨대 한 방에 설명해주는 도식이라고 할 수 있다.

 

프로세스는 무엇이고,

또 스레드는 무엇인가?

 

프로세스와 스레드를 한 문장으로 설명할 수는 없다.

그러나 큰 단위, 중간 단위, 작은 단위로 나눠서 한 문장씩으로 설명하는 것은 가능하다.

 

프로세스는 운영체제로부터 자원을 할당받는 단위이고,
스레드는 프로세스가 할당받은 자원을 실행하는 단위이다.

이게 가장 큰 단위이다.

 

학부생 때 필자는 이게 피부로 와닿지 않았다.

그러나 실무를 진행하면서 진정으로 피부로 와닿았는데,

이것을 쉽게 말하면 이런 것이다.

 

  • 운영체제는 한정된 컴퓨팅 자원을 갖고 있음 ▶ CPU, 램, GPU, 등
  • 프로세스가 생성되면 운영체제는 그 프로세스가 필요로 하는 만큼의 자원을 할당함
    • 예를 들어, 배틀그라운드를 플레이하려면 RAM이 최소 8GB 정도 필요한데, 운영체제(Windows10 기준)가 기본으로 4GB 정도를 차지하고 있고, 배틀그라운드는 남은 RAM 용량을 필요로 한다.
  • 스레드는 그 프로세스 내부에서 생성되며, 함수를 실행시키기 위해 함수에 있는 변수와 로직에 따른 컴퓨팅 파워를 위임받아서, 실행한다.

 

조금 더 쉽게 말하면, 아래와 같다.

 

  1. Python 프로그램인 print_prime_number.py는 소수를 판별하여 터미널에 출력하는 함수 3개를 갖고 있는 프로그램이다. 이 프로그램은 3GB의 램, CPU의 30%를 점유해야 한다.
  2. 명령어 $ python3 print_prime_number.py 를 통해서 프로세스가 생성된다. 이때 운영체제는 CPU의 30%, 램에서 3GB만큼 떼어서 해당 프로세스에 자원을 할당한다.
  3. print_prime_number.py 프로그램(프로세스)은 스레드 1, 스레드 2, 스레드 3을 생성하고, 스레드 1, 2, 3은 각각 맡은 함수를 실행하기 위해 프로세스에 할당된 30%의 CPU 자원, 그리고 3GB의 램을 사용한다.
  4. 3개의 스레드는 각각 소수를 판별하여 터미널에 출력한다.

 

각각의 과정에서 프로세스와 스레드가 큰 단위에서 하는 일이 모두 설명되어 있다.

실무에서는 예를 들어, 백엔드의 경우 각각의 스레드가 클라이언트의 요청 1개에 대응하여 (예: API 호출 등) 함수를 실행하게 된다.


다음 편에 계속…….


 

반응형