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

Hailee·2021년 3월 13일
4

[ 혼자 공부하기 ]

목록 보기
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개의 댓글