식당 예시
위의 그림처럼 식당과 비교해서
프로그램의 흐름의 핵심은
CPU 코어, 스레드, 프로세스로 구성이 된다
코어와 쓰레드
코어는 일을 하는 전력과도 같다
대부분의 컴퓨터는 멀티 코어이지만
아래의 예시에서는 하나의 코어만 있다고 가정해 보자
여러 프로그램을 실행하는 경우에
우선순위 및 작업량에 따라서 CPU가 스레드를 배치한다
그리고 하나의 코어가 배치된 쓰레드를 번갈아가며 실행한다
사실상 코어는 단 하나의 스레드만 실행을 하지만
스레드의 전환 속도를 높이면 마치 여러 스레드를 동시에 실행하는 것처럼 동작한다
그리고 이를 멀티스레드 환경이라고 부른다
스레드에 대한 고찰
중요하지 않거나 작업량이 많지 않은 프로그램의 경우는
하나의 스레드(단일 스레드)로 동작한다
반면, 중요하고 작업량이 많은 프로그램의 경우는 여러 스레드를 배치해 동작한다
만약, 코어 개수가 적은 CPU라면
쓰레드를 여러 개를 배치한다고 해서
처리 속도가 빨라지는 것은 아니다
또한, 여러 개의 스레드들 중에서도
우선순위에 따라 특정 스레드를 많은 시간 사용되도록 할 수 있다
현실적인 상황
이상적인 상황
하나의 프로그램에 여러 스레드 vs 동일한 프로그램 여러개에 각 하나의 쓰레드
동일한 프로그램 여러 개를 실행하면
각각 스레드가 독립적으로 동작하며 자원을 잡아먹는다
반면, 하나의 프로그램에 여러 스레드를 배치해서 실행하면
하나의 프로그램에 있는 Heap 영역과 Data 영역이 공유가 되며
여러 스레드들이 이에 접근하게 된다
이처럼 멀티스레드를 이용하면
공유된 공간을 어떻게 접근 및 관리하느냐가 중요해진다
멀티스레드 결론
게임 서버를 멀티스레드 환경으로 작동하도록 만들게 된다
그런데 이러한 경우 앞서 언급된 공유된 공간에 대한 접근 및 관리뿐 아니라
멀티스레드들을 어떻게 병렬로 관리하고 실행시키느냐가 중요하다
뒤에서 이를 계속 공부하게 된다
'게임 서버' 카테고리의 다른 글
[게임서버 섹션2 Note] Lock 기초 (0) | 2024.12.28 |
---|---|
[게임서버 섹션2 Note] Atomic (0) | 2024.12.28 |
[게임서버 섹션2 Note] 스레드 생성 (0) | 2024.12.28 |
[게임서버 섹션1 Note] 환경 설정 (0) | 2024.12.28 |
[게임서버 섹션1 Note] 서버 개론 (0) | 2024.12.28 |