[ 혼자 공부하기 ] Process vs. Thread

Hailee·2021년 3월 13일

[ 혼자 공부하기 ]

목록 보기
4/5
post-thumbnail

면접에서 빠지지 않고 질문받았던 부분.

프로세스와 쓰레드란? 둘의 차이는 무엇인가요?

멀티쓰레드.. 싱글쓰레드.. 이런 단어는 들어봤지만(사실 잘 모른다😞 이것도 오늘 정리해야지)
프로세스와 쓰레드를 비교하는 생각은 해본적이 없다.

주니어를 상대로 하는 면접질문은 근본적인 부분에 대해서 많이 물어보시는 것 같다.
'탄탄한 기본기'를 중요하게 생각하는 개발자라고 해놓고, 컴퓨터 공학 기초도 모르다니.

부끄러운 마음에 정리하는 오늘의 TIL.


프로그래밍이란 무엇인가요?

"작업을 위해서 실행할 수 있는 파일"

: An executable file

일반적으로는 application이라고 부른다. 👉 웹 사이트는 web application!

한마디로, 실행 가능한 파일!
그렇다면, 프로그램은 어떻게 실행되는가?

binary 코드로 되어있는 프로그램 파일이 실행되는데, 그래서 이게 어떻게 실행된다고?

Process란?

"실행되고 있는 컴퓨터 프로그램"

: computer program in execution

실행 가능한 파일을 실행 시킨 것!
👉🏻 컴퓨터 프로그램이 실행되고 있는 것

프로그램 동작 과정은 요로케 된다.

1. 오퍼레이팅 시스템(컴퓨터 자원 관리하는 두뇌)이
2. 실행 가능한 파일을 메모리에 올린 후
3. 프로세스를 통해 실행시킨다.

프로세스는 어떻게 생겼나요?

  • Register: 명령, 주소를 들고있는 CPU의 한 부분
  • Counter: 프로그램 안에서 현재 어느 위치를 실행시키고 있는지 가르키는 요소
  • Stack: function call을 할 때, depth가 들어가면서 실행이 되는데 그때 사용됨
  • Heap: 프로세스 메모리 상단에 위치. 동적으로 할당 가능한 메모리.
    메모리 사이즈에 대한 제한이 없다.
  • Code: 우리가 실행하는 코드

프로그램을 위한 프로세스 실행 과정은?

1. 하나의 어플리케이션을 실행
2. 하나의 프로세스가 실행

Thread란?

"프로세스의 실행 단위"
: the unit of execution within a process

프로세스는 여러개의 쓰레드를 가질 수 있다.
프로세스 내 하나의 실행 단위 👉🏻 쓰레드!

CPU를 나눠서 사용하는 것을 concurrency라 한다.
눈에 보기에는 동시 실행(병렬)같지만, CPU의 자원을 나눠쓰고있기 때문에 그래보이는 것일 뿐!

Process & Thread

상하관계가 존재한다.
하나의 프로세스 내에 여러개의 쓰레드 존재 & 각 쓰레드 내 스택 존재
그리고 이 쓰레드들은 코드, 데이터, 힙을 공유한다.

numProcessThread
1실행 중인 프로그램프로세스의 실행 단위
2종료하는데 시간이 걸린다.종료하는데 시간이 덜 걸린다
3생성하는데 더 많은 시간이 걸린다생성 시간이 덜 걸린다
4컨텍스트 전환에 많은 시간이 걸린다컨텍스트 전환에 소요되는 시간이 줄어든다
5커뮤니케이션 측면에서 프로세스의 효율성이 떨어진다대화면에서 쓰레드가 더 효울적이다
6프로세스가 더 많은 리소스를 소비한다쓰레드는 적은 자원을 소비한다
7프로세스는 격리되어있다쓰레드는 메모리를 공유한다
8heavy-weight process라 불린다light-weight process라 불린다
9프로세스 전환 👉🏻 운영체제의 인터페이스 사용쓰레드 전환 👉🏻 운영체제를 호출하여 커널을 중단시킬 필요가 없다

Python GIL(Global Interpreter Lock)

python은 compile, interpreter 언어 중 interpreter 언어.
이는 별도의 compile 과정을 거치지 않고 그때 그때 필요한 것만을 호출하는 언어!

한번에 하나의 line만 실행되도록 lock을 거는 것.
👉🏻 멀티쓰레드처럼 보여도, 실제로는 싱글 쓰레드처럼 동작하는 것
👉🏻 여러 쓰레드가 동시에 파이썬 객체에 접근하는 것을 막아줌
🌟 성능은 떨어지지만, 충돌이 나거나 synchronization이 안된다던지 하는 일은 발생하지 않는 장점이 있다.

멀티쓰레드의 좋은 점?

조건 : 명령을 보내고 나서 / REST api 호출하고 나서 2-3초 동안 기다려야 하는 상황
1. cpu bound

  • 다른 일 처리를 해도 되는 것
  1. io bound
  • 사실상 일을 하지 않지만 기다려야 하는 것.
  • 이를 해소하는 데에는 멀티쓰레드가 좋다.

멀티쓰레드라는 개념은 좀 더 효율적으로 작업을 해내는 상황에 필요한 것 같다.

profile
웹 개발 🐷😎👊🏻🔥

0개의 댓글