스레드는 어쩌다 생겨났을까?
스레드가 생기기 전엔 멀티프로세스 기반으로 서버를 만들었다. 멀티프로세스는 나름의 장점도 있지만, 단점이 명확하다. 프로세스 생성작업이 운영체제 차원에서 부담되는 작업이라는 것이다.
하지만 생성작업 자체는 처음에만 이루어지기 때문에 굳이?라는 생각이 들 수 있지만 다음 단점은 정말 심각하다.
많게는 초당 수천 번까지 일어나는 컨텍스트 스위칭(Context Switching)이 상당히 부담된다.
※컨텍스트 스위칭이란?
→간단히 말하면 CPU가 둘 이상의 프로세스를 실행시키기 위해 두 프로세스를 오가는 과정에서 프로세스들의 데이터들을 저장, 불러오는 과정이다.
이런 단점들을 최소화하기위해 '경량화된 프로세스' 로써 스레드가 탄생했다.
그럼 프로세스와 뭐가 달라?
프로세스는 데이터영역, 힙영역, 스택영역을 가지고 있다.
컨텍스트 스위칭이 일어나면, 이 3가지 영역을 포함해 많은 정보가 저장되고 불러와져서 부담이 간다.
하지만 스레드의 경우 이러한 구조를 갖는다.
사진과 같이 쓰레드는프로세스 내부의 단위다. 스레드는 각자의 스택영역을 가지고 있으며 데이터영역과 힙영역은 공유한다.
이로써 두 가지 장점을 얻을 수 있다.
- 컨텍스트 스위칭 시, 데이터/힙 영역은 가만히 있고 스택영역만 처리하면 된다.
- 데이터영역과 힙영역을 통해 데이터를 교환할 수 있다.
마무리
스레드와 프로세스의 차이를 공부해 봤다.
정리하면, 프로세스는 운영체제 관점에서 별도의 실행 흐름을 구성하는 한 단위이고, 스레드는 프로세스의 관점에서 별도의 실행 흐름을 구성하는 단위이다!
참고
'TCP-IP 소켓 프로그래밍' 카테고리의 다른 글
epoll을 이해해보자 (0) | 2023.09.12 |
---|---|
스레드의 동기화를 이해해보자 (1) | 2023.09.11 |
Select 모델을 위한 Select 함수를 이해해보자 (0) | 2023.09.05 |
Nagle 알고리즘을 이해해보자 (0) | 2023.09.04 |
주소할당 에러(Binding Error)를 이해해보자 (1) | 2023.09.04 |