#프로세스, 스레드, 프로그램
프로그램(program)
컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일
저장 장치에는 있는 상태지만, 메모리에는 적재되지 않은 정적인 상태를 의미함.
프로세스(process)
컴퓨터에서 실행되고 있는 프로그램을 말한다. cpu 스케줄링의 대상이 되는 작업이라고도 의미한다.
프로그램으로부터 인스턴스화된 것을 의미한다.
스레드(thread)
프로세스 내 작업의 흐름(흐름의 단위)
프로세스와 스레드의 메모리 구조
- 코드 영역 : CPU가 해석 가능한 기계어의 형태로 저장이 됨
- 데이터 영역 : 전역 변수 혹은 함수 등 각종 데이터들이 저장되어있는 장소
- 스택 영역 : 지역변수, 매개변수, 함수 등이 저장되고 컴파일 시 크기가 결정되며, "동적"인 특징을 갖는 영역 (함수를 재귀적으로 호출하면, 동적으로 크기가 늘어나는데, 힙과의 영역이 겹치면 안되기 때문에 힙과 스택사이의 공간이 존재한다.)
- 힙 영역 : 생성자, 인스턴스와 같은 동적으로 할당되는 데이터를 위한 공간
- 스레드는 프로세스와 달리 코드 ,데이터 ,힙은 스레드끼리 공유한다. 그 외의 영역은 각각 생성이 된다.
멀티 스레딩
- 멀티 스레딩은 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이다.
- 한 스레드가 중단되어도 다른 스레드를 실행할 수 있기 때문에 중단되지 않고 빠른 처리가 가능하며, 동시성에 큰 장점이 있다. 하지만, 자원을 공유하기 때문에 문제가 생기면 다른 스레드에 영향을 끼칠 수가 있다.
멀티 프로세싱
- 프로세스를 여러 개 두어 동시에 두 가지 이상의 일을 수행할 수 있는 것을 의미한다.
프로세스가 다른 프로세스의 정보에 접근하는 방법?
- IPC(Inter Process Communication) : 프로세스끼리 데이터를 주고 받고 공유 데이터를 관리하는 메커니즘
1. 공유 메모리
- 파일
- 소켓
- 파이프
- 메시지 큐
공유 메모리
- 동일한 메모리 블록을 만들어, 해당 메모리 블록에 접근 권한을 부여하여 프로세스가 서로 통신하도록 공유 버퍼를 생성하는 것
파일
- 디스크에 저장된 데이터 혹은 파일 서버에서 제공한 데이터를 말한다. 이러한 저장된 데이터를 다른 프로세스에서 가져가서 사용하는 방법
소켓
- 네트워크 통신을 위한 기술 동일한 컴퓨터의 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터를 의미한다 (TCP, UDP)
파이프
- 임시 공간인 파이프를 기반으로 데이터를 주고받는 방식
메시지 큐
- 메시지를 큐 데이터 구조 형태로 관리하는 것을 의미한다.
출처
- 면접을 위한 CS 전공 지식 노트
- StackOverflow