우리가 어떠한 작업(task)을 수행 하기 위해 이에 필요한 코드(a set of instructions)를 작성하고 이 코드를 실행 가능한 파일로 만드는 작업을 거친다. 이 때 만들어진 파일을 프로그램이라고 하는데, 프로그램은 그 자체로는 아무런 기능도 하지 않고 메모리에 적재되어 사용되어야 한다.
👉 프로그램 : 작업(task)을 수행하기 위해 코드(instructions)들로 만들어 진 실행 가능한 파일
프로그램이 메모리에 적재되는 순간, 프로그램은 실행되어 다양한 작업을 수행할 수 있다.
실행중인 프로세스를 잘 살펴 보면 각 프로세스가 사용중인 메모리, 스레드, CPU 사용률 등을 확인할 수 있다.
이를 통해 프로세스는 운영체제가 자원을 할당하는 단위가 될 수 있다는 것을 알 수 있다.
👉 프로세스 : 운영체제에게 자원(메모리)을 할당받아 CPU에 의해 실행/제어 되고 있는 프로그램
위 사진을 보면, 각각의 프로세스가 여러 개의 스레드를 가지고 있다. 이를 통해 자원을 할당받는 단위와 실제 작업을 수행하는 단위가 다르다는 것을 알 수 있다.
👉 스레드 : 하나의 프로세스 내에서 실행되는 각각의 실행 흐름
그렇다면 스레드를 사용하는 이유는 무엇일까❓
Multi-Process에 비해 Overhead 절감
Multi-process 로 실행되는 작업을 Multi-thread로 실행하면
- 프로세스를 생성하면서 자원을 할당하는 과정이 줄고
- 프로세스들을 context switching하는 것보다 오버헤드를 더 줄일 수 있다.
주소공간 공유
- 스레드는 주소공간을 공유하기 때문에 동일한 값에 접근할 수 있다.
- 스레드 간의 context switching 에서는 주소 공간을 그대로 사용한다.
👉 따라서 프로세스 간 통신비용보다 스레드 간 통신비용이 훨씬 적다.
멀티 프로세스(Multi Process)
👉 하나의 프로그램을 여러 개의 프로세스로 나눠 사용하는 것
장점
단점
Multi Thread
👉하나의 프로세스가 여러개의 스레드를 갖고, 각 스레드가 서로 다른 작업들을 수행
장점
단점