프로세스(Process)란
컴퓨팅에서 프로세스는 하나 이상의 스레드에 의해 실행되는 컴퓨터 프로그램의 인스턴스입니다. (운영체제로부터 메모리/CPU 등의 자원을 할당받는 작업의 단위입니다.)
프로세스는 프로그램 코드, 할당된 시스템 리소스, 물리적 및 논리적 액세스 권한, 실행 활동을 시작, 제어 및 조정하는 데이터 구조를 포함합니다. 프로세스는 최소한 하나의 스레드를 포함하며, OS에 따라 명령을 동시에 실행하는 여러 실행 스레드로 구성될 수 있습니다.
프로그램과의 차이
컴퓨터 프로그램은 일반적으로 디스크의 파일에 저장된 명령의 수동적 모음인 반면, 프로세스는 디스크에서 메모리로 로드된 후 해당 명령을 실행하는 것입니다. 여러 프로세스가 동일한 프로그램과 연관될 수 있습니다. 예를 들어, 동일한 프로그램의 여러 인스턴스를 열면 둘 이상의 프로세스가 실행되는 경우가 많습니다.
프로세스 끼리는 자원을 공유하지 않습니다.
각 프로세스는 자신만의 고유한 메모리와 자원을 할당받아 사용하기에, 타 프로세스와는 자원을 공유하지 않습니다.
이에 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 합니다.
프로세스의 문제점은?
- 프로세스 생성에 큰 오버헤드가 있음 ( 프로세스를 생성할때 많은 시간이 소요됨)
- 프로세스 컨텍스트 스위칭의 비효율성, 오버헤드가 큼
- 프로세스 사이에 통신이 어렵다는점 (IPC사용해야함)
스레드(Thread)란
컴퓨터 과학에서 실행 스레드는 일반적으로 운영 체제의 일부인 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 명령의 가장 작은 시퀀스입니다. (운영체제로부터 할당 받은 자원을 이용하는 실행 단위입니다.)
스레드는 부모 프로세스의 자원을 공유합니다.
스레드는 스택만 따로 할당받고 / 코드, 데이터, 힙 메모리는 공유합니다. 이에 스레드간 자원 공유가 쉽고, 메모리 사용이 훨씬 효율적이게 됩니다.
단, 이로 인해 공유 자원의 동기화 문제가 발생합니다. (한 스레드가 공유 자원을 변경하면, 다른 모든 스레드도 변경된 값을 사용하게 됨)
스레드의 출현 목적은?
- 프로세스보다 크기가 작은 실행 단위 필요
- 프로세스의 생성 및 소멸에 따른 오버헤드 감소
- 빠른 컨텍스트 스위칭
- 프로세스들의 통신 시간, 방법 어려움 해소
참고
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html