어떤 파일을 실행했을 때 프로세스가 만들어지면서 프로그램이 실행된다.
이렇게 운영체제 안에서 실행중인 프로그램으로 프로세스라 하며, 프로스세는 실행 중인 프로그램의 인스턴스다.
각 프로세스는 독립적인 메모리 공간을 가지고 있다. 각 프로세스는 별도의 메모리 공간을 가지고 있기 때문에 서로 간섭하지 않고, 서로의 메모리에 직접 접근할 수 없다.
엑셀 프로그램과 음악 프로그램을 실행했 을 때 엑셀 프로세스, 음악 프로세스는 서로 간섭 X, 서로의 메모리 직접 접근 X 이라 생각하면 된다.
따라서 어떤 하나의 프로그램의 프로세스에 충돌이 일어나도 다른 프로그램의 프로세스에는 영향을 미치지 않는다.
예)
클래스 - 프로그램
인스턴스 - 프로세스
스레드는 프로세스 내에서 실행되는 작업의 단위인데, 한 프로세스 내에서 여러 스래드가 존재할 수 있고 프로세스가 제공하는 동일한 메모리 공간을 공유한다.
스레드는 프로세스보다 단순해서 생성 및 관리가 쉽고 가볍다.
(프로세스를 실행하려면 코드, 힙, 기타, 스레드(+스택)이 떠야하는데 스레드는 스택과 만들면 끝이기 때문)
프로세스는 하나 이상의 스레드를 반드시 포함한다.
이미지 상 스레드에서 코드
, 힙(메모리)
, 기타
영역에 접근해서 사용할 수 있다는 말이다.
프로그램이 실행된다는 건,
1. 운영 체제는 디스크에 있는 파일 덩어리인 프로그램을 메모리로 불러오면서 프로세스 생성
2. 프로세스 안에 있는 코드가 한 줄씩 실행되는 것.
여기서 누가 코드를 한 줄씩 읽어 내려갈까?
바로 Thread!
따라서 하나의 프로세스 안에는 최소 하나의 스레드가 존재한다 왜냐하면, 그래야 프로그램을 실행(코드를 한줄씩 읽어 내려감)을 할 수 있으니까!
프로세스는 실행 환경과 자원을 제공하는 컨테이너 역할을 하고,
스레드는 CPU를 사용해서 코드를 하나하나 실행한다.
하나의 프로그램도 그 안에서 동시에 여러 작업이 필요하므로!
내가 자주 사용하는 애플 뮤직을 예를 들면, 음악을 들으면서 내가 좋아하는 음악 좋아요도 누르고 플레이리스트도 동시만들고...
또 유튜브에서는 영상을 시청하며 댓글을 달 수 있듯이
멀티스레드를 사용하면 하나의 프로그램에서 동시에 여러 작업을 할 수 있기 때문!
== 병렬처리 가능