프로세스와 스레드
프로세스와 스레드 차이
프로세스와 스레드의 차이를 알아보고, Context Switching에 대해서도 비교해보자 ❕
프로세스와 스레드에 대해서 자세히 알아보자. 특히 ❗ 이부분은 각각의 메모리 할당과 관련한 부분이다.
이 차이가 Context Switching 속도에 영향을 준다.
Context Switching이란
하나의 프로세스를 실행하고 있는 상태에서 다른 프로세스를 실행해야 할 때 발생한다. 기존 프로세스의 상태를 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태로 교체하는 작업이다.
프로세스
프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당 받는다.
❗ 각각 독립적인 메모리 영역(Code, Data, Stack, Heap)을 할당받는다.
하나의 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
프로세스당 최소 1개의 스레드(Main 스레드)를 가지고 있다.
스레드
❗ 같은 프로세스의 스레드들끼리는 각각 Stack만 따로 할당받고, 프로세스 내의 주소 공간이나 자원들(Code/Data/Heap)은 공유한다.
장점
스레드간 데이터를 주고 받는 때 자원 소모가 줄고, 응답 시간 단축된다.
Context Switching의 오버헤드가 해결된다.
단점
서로 데이터를 사용하다가 충돌이 일어날 수 있다.
어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.
즉, 프로세스는 모든 메모리 영역(Code, Data, Stack, Heap)을 독립적으로 가진다. 반면, 스레드는 Stack만 독립적으로 할당받고, 그 외의 메모리 영역(Heap 등)은 공유한다. (같은 프로세스 내의 여러 스레드들일 경우) 이 차이가 Context Switching 속도에도 영향을 준다.
스레드가 Context Switching이 더 빠르고 메모리를 효율적으로 쓴다.
이것이 멀티 프로세스 대신 멀티 스레드를 사용하는 이유이기도 하다.
메모리 측면 : 자원을 효율적으로 사용하기 위해
멀티 프로세스의 경우 프로세스를 생성하여 자원을 할당하는 시스템 콜을 할 때마다 오버헤드가 크지만, 멀티 스레드는 메모리 영역을 공유하기 때문에 시스템 자원을 효율적으로 사용할 수 있다.
속도 측면 : Context-Switching 비용을 줄이고 응답 속도를 빠르게 하기 위해
메모리 영역을 공유하기 때문에 Context-Switching과 스레드 간의 통신 시 Stack 영역만 처리하기에 통신 비용이 적고 응답속도가 빠르다.
Last updated