기술 면접을 대비해 개념을 🍰 한입 크기로 잘라 정리합니다.
깃허브가 궁금하다면 놀러오세요!
👉 깃허브 보러가기 (Since 2023.05.10 ~ )
✍️ 프로세스와 스레드, 한줄 정리
프로그램(Program) | 프로세스 (Process) | 스레드 (Thread) |
---|
어떤 작업을 하기 위해 실행할 수 있는 파일 | 운영체제로부터 자원을 할당받은 작업의 단위 | 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 |
🖥️ 프로그램(Progam)
어떤 작업을 위해 실행할 수 있는 파일
로, 작성한 코드를 빌드하여 생성되는 결과물을 의미합니다.
- 프로그램은 파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은 정적인 상태입니다.
- 따라서 프로그램을 실행하기 위해서는 Memory 자원을 할당 받아야 하는테, 이때 자원을 할당받아 실행되는 프로그램을 프로세스라고 합니다.
🖥️ 프로세스 (Process)
컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
으로, 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)를 말합니다.
- 즉 운영체제로부터 시스템 자원을 할당받은 작업의 단위로, 동적인 개념으로는
실행된 프로그램
을 의미합니다.
특징
- 프로세스는 각각 독립된 메모리 영역 (Code, Data, Stack, Heap의 구조)를 할당 받습니다.
- 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있습니다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료 구조에 접근할 수 없습니다.
- 한 프로세스가 다른 프로세스 자원에 접근하려면 프로세스 간의 통신(IPC, Inter-Process-Communication)을 사용해야 합니다.
- e.g. 파이프, 파일, 소켓 등을 이용한 통신 방법
🖥️ 스레드(Thread)
프로세스 내에서 실행되는 여러 흐름의 단위
로, 프로세스의 특정한 수행 경로를 말합니다.
- 즉 프로세스가 할당받은 자원을 이용한 실행의 단위입니다.
쉽게 설명하자면, 크롬 브라우저를 실행하면 하나의 프로세스가 생성됩니다.
이때 브라우저에서 파일을 다운 받고, 노래를 들으며 온라인 쇼핑을 한다면, 각 작업마다 스레드가 형성됩니다.
즉, 하나의 프로세스 안에서 여러 작업의 흐름이 동시에 진행되기 때문에 가능한 일입니다. 여기서 각 일련의 작업 흐름들을 스레드라고 하며, 스레드가 여러 개라면 멀티(다중) 스레드라고 합니다.
특징
- 스레드는 프로세스 내에서 각 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유합니다.
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 프로세스 내 스레드끼리 공유하며 실행됩니다.
- 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없습니다.
- 각 스레드는 별도 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있습니다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling Thread)도 해당 변경 결과를 즉시 볼 수 있습니다.
📎 참고문서