[OS] 프로세스 vs 스레드
프로세스와 스레드
프로세스: 프로그램이 메모리상에서 실행되는 작업 단위
스레드: 프로세스 내에서 실행되는 여러 흐름의 단위
프로세스는 프로세스에 대한 설명 참고
메모리 관점에서의 프로세스와 스레드
프로세스는 Code, Data, Heap, Stack 영역으로 구성되어 있다. 같은 프로세스 내의 스레드들은 Code, Data, Heap 영역을 공유하지만 Stack은 별도로 할당받는다.
한 프로세스는 최소 한 개의 스레드를 가진다. 프로세스 내의 주소공간과 리소스들을 프로세스 내의 스레드끼리 공유하면서 실행된다. 하나의 프로세스는 다른 프로세스의 메모리에 접근 불가하므로 다른 프로세스의 스레드 또한 접근할 수 없다.
프로세스와 스레드 비교
이처럼 스레드 간에는 메모리를 공유함으로써 프로세스와 차이점이 발생한다.
-
동시에 여러 작업을 할 때, 멀티 스레드를 사용하는 것이 멀티 프로세스보다 시스템 자원(메모리)를 더 적게 사용한다.(처리 비용 감소)
-
프로세스는 독립적인 메모리 공간을 가지므로 프로세스 간 통신에 별도의 의사소통인 IPC(Inter Process Communication)가 필요하다.
- 여러 프로세스가 병렬적으로 실행되도록 하기 위해 Context Switching 이 일어나는데 프로세스는 캐시 메모리 초기화 작업 때문에 오버헤드가 발생할 수 있다. 그러나 쓰레드는 공유하는 데이터가 더욱 많기 때문에 Context Switching이 더 빠르며 이로 인한 오버헤드가 적다.
Context Switching(문맥교환)
컴퓨터에서 동시에 처리할 수 있는 최대 작업 수는 CPU의 코어 수와 같다. CPU 코어 수보다 많은 task가 실행되면 각 코어들이 정해진 시간 동안 여러 작업을 번갈아가며 수행한다. 이때 현재까지의 작업(프로세스 또는 스레드)의 상태(context)를 저장하고 다음 작업의 상태를 읽어오는 과정을 문맥교환이라고 한다. - 멀티 스레드를 사용할 경우 공유된 데이터를 사용하다 충돌이 발생할 수 있다. (동기화 문제) 따라서 멀티 스레드 환경에서는 동기화 작업이 필요하다. 이를 통해 작업 처리 순서를 통제할 수 있지만 병목현상이 발생하여 성능이 저하될 수 있다.