- 멀티 쓰레드를 설명하기 앞서 프로그램, 프로세스와 쓰레드에 대한 정리를 할 필요가 있다.
프로그램과 프로세스란?
- 프로그램은 하드 디스크에 저장된 실행 코드를 의미한다.
- 그리고 프로세스란 이 프로그램 자체와, 프로그램의 상태가 메모리에서 실행되는 '작업 단위'를 의미한다.
프로세스의 상태
- 생성 : 프로세스가 생성 중인 상태
- 실행 : 프로세스가 CPU를 차지하여 명령어를 실행중인 상태
- 준비 : 프로세스가 CPU를 사용하고 있지는 않지만, 언제든지 사용할 수 있는 상태 (CPU가 할당되기를 기다리는 중)
- 대기 : 프로세스가 입출력 완료, 시그널 수신 등의 이벤트를 기다리고 있는 상태
- 종료 : 프로세스의 실행이 종료된 상태
쓰레드란?
- 프로세스보다도 작은 실행 흐름의 최소 단위
- 하나의 프로그램에서 복잡한 동시 작업을 요구하게 되면서 프로세스보다 더 작은 실행 단위 개념이 만들어지게 되는데 이것이 쓰레드이다.
- 하나의 프로세스에서 여러 개의 쓰레드가 메모리를 공유하여 작동할 수 있으며, 그래서 생성과 속도가 빠르고 적은 메모리를 점유하지만, 그 대가로 자원 선점과 동기화 문제를 얻게 되었다.
그렇다면 멀티 쓰레드란?
- 위에서 하나의 프로세스에서 여러 개의 쓰레드를 사용할 수 있다고 했는데 이 상태를 멀티 쓰레드라고 한다.
- 하나의 코어 당 한 시점에 하나의 쓰레드를 동작시킬 수 있는데 오늘날의 컴퓨터는 여러 개의 코어를 가지고 있으므로 이를 활용하면 여러 개의 코어를 이용해서 동시에 여러 개의 쓰레드를 실행시킬 수 있다.
- 멀티 쓰레드의 단점은 잘못 사용하면 싱글 쓰레드보다 더 느린 성능을 가져온다는 것
- 서버에서 어떤 일을 하라고 지시했는데, 해당 쓰레드가 비자발적으로 os에 의해 다른 일을 하게 된다던가 자기가 할 일을 마친 쓰레드들이 쉬고 있다던가 하는 많은 경우들을 처리할 수 있도록 프로그래밍해야 한다.
- 또한 자원 선점 문제(Race Condition) 와 동기화 문제를 해결하기 위해서 이런 문제들을 마주했을 때 어떻게 조치해야 하는지 앞으로 배워 나갈 것이다.
- 이번 강의에서는 프로세스를 가게, 쓰레드를 직원으로 표현하고, 코어를 영혼으로 표현해서 코어가 쓰레드에 빙의한 후 짧은 주기로 다른 쓰레드들로 옮겨가며 동시에 움직이는 것처럼 보이는 것을 묘사했는데 기존에 들었던 내용들과 겹치는 부분들도 있어서 이해하기 쉬웠다.
'게임 서버 > [Inflearn_rookiss]올인원_클라&서버 연동' 카테고리의 다른 글
6. 데드 락 (0) | 2023.12.11 |
---|---|
5. 스핀 락 (0) | 2023.12.11 |
4. Lock 기초 (0) | 2023.12.11 |
3. CPU 파이프라인 및 공유 자원 (0) | 2023.12.11 |
2. 멀티 쓰레드 실습 (0) | 2023.12.11 |
댓글