프로세스 (Process)
운영체제로부터 자원을 할당받은 작업의 단위이다. 프로그램이 실행되면 해당 프로그램 파일이 컴퓨터 메모리로 올라가게 되는데 이 동적인 상태의 프로그램을 프로세스라고 부른다.
스레드 (Thread)
프로세스 내에서 실행되는 흐름의 단위이자 프로세스를 구성하는 더 작은 실행 단위의 개념이다. 프로세스는 실행될 때 운영체제로부터 할당받은 독자적인 메모리 공간을 사용하지만 스레드는 같은 프로세스 내 다른 스레드와 메모리 공간을 공유한다. (Code, Data, Heap 등. 대신 Stack은 각 스레드 별로 따로 할당받는다.)
싱글 스레드
한 프로세스에서 하나의 스레드를 실행하는 것을 말한다.
- 장점
- 스레드가 하나밖에 존재하지 않기 때문에 공유 자원 접근에 대해 신경쓰지 않아도 된다. (스레드가 여러 개인 경우 리소스에는 한 번에 하나의 스레드만 접근 가능하기 때문에 접근 통제 작업이 필요하다.)
- 작업 전환 비용이 발생하지 않는다. (방금 언급한 리소스 접근 동기화 작업 포함)
- 단점
- 여러 CPU를 활용하지 못한다.
- 일반적으로 스레드를 여러 개 사용하는 것보다 떨어진 성능을 보인다. (그렇지만 작업에 따라 싱글 스레드가 멀티 스레드보다 더 좋은 성능을 보이는 경우도 존재한다. 이는 여러 스레드를 사용하는 효과보다 작업 전환으로 인해 발생하는 코스트가 더 많은 경우이다.)
멀티 스레드
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업하는 방식을 말한다.
- 장점
- 한 스레드가 작업을 하는 동안 다른 스레드는 다른 작업을 수행할 수 있으므로 효율적이다.
- 여러 스레드가 한 프로세스의 리소스를 공유하기 때문에 시스템 자원의 관점에서 효율적이다. (멀티 프로세스와 비교해서 통신 비용이 훨씬 적게 발생한다.)
- 단점
- 멀티 스레딩에 대한 운영 체제의 지원이 요구된다.
- 문맥 교환에 의한 코스트가 커질 경우 오히려 싱글 스레드보다 비효율적인 퍼포먼스를 보일 수 있다.
※ 문맥 교환 (Context Switching)
컴퓨터가 동시에 처리할 수 있는 최대 작업의 수는 해당 컴퓨터의 CPU 코어 수와 일치한다. 만약 실행되는 스레드의 수가 해당 컴퓨터이 CPU 코어 수보다 많다면 각 코어가 여러 스레드를 돌아가면서 처리하게 된다. 스레드가 교체될 때에는 현재까지의 작업 상태 및 다음 작업에 대한 정보 등을 저장하고 읽어오는 작업이 필요한데 이를 문맥 교환이라고 부른다. 문맥 교환에서 발생하는 비용은 멀티 스레딩의 효율과 직결된다.
※ 멀티 프로세스
멀티 프로세스는 여러 CPU를 사용해서 여러 프로세스를 동시에 수행하는 것을 의미한다. 여러 실행 단위가 동시에 실행된다는 점에서 멀티 스레드와 유사한 성격을 지니지만 멀티 프로세스에서는 각 프로세스가 독립적 메모리 자원을 차지하고 멀티 스레드는 모든 스레드가 해당 프로세스의 메모리 자원을 함께 공유한다는 점에서 차이점을 가진다.
'CS 공부' 카테고리의 다른 글
[Network] 프록시 서버 (Proxy Server) (0) | 2022.04.16 |
---|---|
[Network] HTTP (HyperText Transfer Protocol) (0) | 2022.04.16 |
[CS] 스레드 안전 (Thread-safe) (0) | 2022.02.27 |
[Infra] Scale up & Scale out (0) | 2022.02.23 |
MSA (MicroService Architecture) vs Monolithic Architecture (0) | 2022.02.23 |