(1) Process & Thread

@MinSang · August 07, 2024 · 3 min read

멀티태스킹 vs 멀티프로세싱

멀티 태스킹은 하나의 CPU 코어가 여러 프로그램의 실행 시간을 분할해서 (시분할, Time Sharing) 번갈아 실행함으로써, 마치 동시에 실행되는 것 처럼 하는 기법입니다.

멀티 프로세싱은 여러 CPU 코어를 사용하여 물리적으로 동시에 여러 작업을 수행하는 것을 의미합니다.

프로세스 vs 스레드

프로그램은 실제 실행되기 전까지는 단순한 파일에 불과합니다. 이 프로그램을 실행하여 메모리에 올라오고 운영체제 안에서 실행중이면 프로세스라 합니다. 그리고 각 프로세스는 서로의 메모리에 직접 접근할 수 없이 격리되어 관리됩니다.

스레드는 프로세스 내에서 실행되는 작업의 단위입니다. 한 프로세스 내에서 여러 스레드가 존재할 수 있으며, 이들은 프로세스가 제공하는 동일한 메모리 공간을 공유합니다. 스레드는 프로세스보다 단순하므로 생성 및 관리가 단순하고 가볍습니다.

프로세스는 메모리 환경을 제공하고(메소드 영역, 힙), 스레드는 실제 코드를 한줄 씩 실행하는 실행단위라 생각하면 될 것 같습니다.

멀티 스레드가 필요한 이유

하나의 프로그램도 그 안에서 동시에 여러 작업이 필요합니다. 예를들어, 유튜브는 영상을 보면서 댓글을 달 수가 있습니다. 만약 단일 스레드 환경이라면, 영상을 멈춰야 댓글을 쓸 수 있기 때문에 매우 불편합니다.

컨텍스트 스위칭

멀티 태스킹이 일어나면 실행중인 스레드 A를 멈추고 OS 레벨영역에 저장해두고 스레드 B를 CPU에 불러오면서 그때 실행중 이었던 코드 위치를 레지스터에 불러오고 계산하던 변수들의 값을 불러오고 하는 등등의 과정을 컨택스트 스위칭이라 합니다.

컨텍스트 스위칭 과정에서 이전에 실행 중인 값을 메모리에 잠깐 저장하고, 이후에 다시 실행하는 시점에 저장한 값을 CPU에 다시 불러와야 하기 때문에 약간의 비용이 발생합니다.

@MinSang
지식과 경험을 기록하는 TIL 저장소