Search

프로세스 & 스레드

프로세스(Process), 스레드(Thread)란?

프로그램

파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태, 즉 컴퓨터에서 실행될 때 특정 작업을 수행하는 코드로 이루어진 파일을 말한다.
이 프로그램을 실행하여 운영체제로부터 자원을 할당받아 컴퓨터 메모리에 올라가면서 동적인 상태 즉, 실행되고 있는 프로그램을 프로세스라고 한다.
이 프로세스가 할당받은 자원을 이용해 프로세스 내부에서 실제로 작업을 수행하는 주체를 스레드라고 한다.

프로세스(Process)

운영체제로부터 시스템 자원을 할당받는 작업의 단위
프로그램이 운영체제로부터 자원을 할당받아 프로세스를 생성할 때, 운영체제는 프로세스 마다 Code, Data, Stack,Heap의 구조로 되어있는 독립된 메모리 영역을 할당해준다. → 각 프로세스는 별도의 주소공간에서 실행되므로 프로세스 간에 다른 프로세스의 변수나 자료에 접근할 수 없다!
프로세스간에 통신을 하고 싶다면 파일이나 소켓을 이용해 (IPC, inter-process communication)을 사용해야 한다.
프로세스는 실행 중 오류 발생으로 강제 종료가 되더라도 다른 프로세스에 영향을 주지 않는다.

스레드(Thread)

프로세스 내에서 실행되는 여러 흐름의 단위이다. 프로세스에서 할당받은 자원을 이용해 작업을 실행하는 단위이다.
스레드는 프로세스와 달리 같은 프로세스 내의 스레드들은 Stack 외 나머지 Code, Data, Heap 형식의 메모리 영역을 공유한다. 즉 주소 공간과 자원을 공유한다.
주소 공간과 자원을 공유하기 때문에 스레드 하나에 오류 발생 시 같은 프로세스 내의 다른 스레드에게 영향을 준다.

멀티 프로세스(Multi Process)

하나의 응용프로그램을 여러 프로세스로 구성 → 각 프로세스가 하나의 작업을 처리하도록 실행한다.
프로세스는 각각 독립된 메모리 영역을 할당받은 상태이기에 하나의 프로그램에 속하는 프로세스 끼리 변수를 공유할 수 없다.
프로세스가 관리하는 레지스터와 데이터가 많은 경우 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching이 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬 정보를 불러오는 과정에서 오버헤드 발생할 수 있다.

Context Switching

CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 것
즉, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했든 프로세스의 상태를 복구하는 작업

멀티 스레드(Multi Thread)

하나의 프로세스에 여러개의 스레드로 자원을 공유하며 작업을 나누어 수행하는 것.
멀티 스레딩의 예시 : 웹서버
멀티 스레드는 프로세스에 비해 효율적으로 자원을 관리할 수 있으며, Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아끼고 통신 부담이 적어 응답시간이 단축된다.
스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.