면접에서 빠지지 않고 질문받았던 부분.
프로세스와 쓰레드란? 둘의 차이는 무엇인가요?
멀티쓰레드.. 싱글쓰레드.. 이런 단어는 들어봤지만(사실 잘 모른다😞 이것도 오늘 정리해야지)
프로세스와 쓰레드를 비교하는 생각은 해본적이 없다.
주니어를 상대로 하는 면접질문은 근본적인 부분에 대해서 많이 물어보시는 것 같다.
'탄탄한 기본기'를 중요하게 생각하는 개발자라고 해놓고, 컴퓨터 공학 기초도 모르다니.
부끄러운 마음에 정리하는 오늘의 TIL
.
"작업을 위해서 실행할 수 있는 파일"
: An executable file
일반적으로는 application이라고 부른다. 👉 웹 사이트는 web application!
한마디로, 실행 가능한 파일!
그렇다면, 프로그램은 어떻게 실행되는가?
binary 코드로 되어있는 프로그램 파일이 실행되는데, 그래서 이게 어떻게 실행된다고?
Process
란?"실행되고 있는 컴퓨터 프로그램"
: computer program in execution
실행 가능한 파일을 실행 시킨 것!
👉🏻 컴퓨터 프로그램이 실행되고 있는 것
프로그램 동작 과정은 요로케 된다.
1. 오퍼레이팅 시스템(컴퓨터 자원 관리하는 두뇌)이
2. 실행 가능한 파일을 메모리에 올린 후
3. 프로세스를 통해 실행시킨다.
프로그램을 위한 프로세스 실행 과정은?
1. 하나의 어플리케이션을 실행
2. 하나의 프로세스가 실행
Thread
란?"프로세스의 실행 단위"
: the unit of execution within a process
프로세스는 여러개의 쓰레드를 가질 수 있다.
프로세스 내 하나의 실행 단위 👉🏻 쓰레드!
CPU를 나눠서 사용하는 것을 concurrency라 한다.
눈에 보기에는 동시 실행(병렬)같지만, CPU의 자원을 나눠쓰고있기 때문에 그래보이는 것일 뿐!
Process & Thread
상하관계가 존재한다.
하나의 프로세스 내에 여러개의 쓰레드 존재 & 각 쓰레드 내 스택 존재
그리고 이 쓰레드들은 코드, 데이터, 힙을 공유한다.
num | Process | Thread |
---|---|---|
1 | 실행 중인 프로그램 | 프로세스의 실행 단위 |
2 | 종료하는데 시간이 걸린다. | 종료하는데 시간이 덜 걸린다 |
3 | 생성하는데 더 많은 시간이 걸린다 | 생성 시간이 덜 걸린다 |
4 | 컨텍스트 전환에 많은 시간이 걸린다 | 컨텍스트 전환에 소요되는 시간이 줄어든다 |
5 | 커뮤니케이션 측면에서 프로세스의 효율성이 떨어진다 | 대화면에서 쓰레드가 더 효울적이다 |
6 | 프로세스가 더 많은 리소스를 소비한다 | 쓰레드는 적은 자원을 소비한다 |
7 | 프로세스는 격리되어있다 | 쓰레드는 메모리를 공유한다 |
8 | heavy-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
- 다른 일 처리를 해도 되는 것
io bound
- 사실상 일을 하지 않지만 기다려야 하는 것.
- 이를 해소하는 데에는 멀티쓰레드가 좋다.
멀티쓰레드라는 개념은 좀 더 효율적으로 작업을 해내는 상황에 필요한 것 같다.