게임의 서버를 구동하는 방식 중 하나인 멀티 쓰레드 방식에 대해 알아보겠습니다.
이를 알기 위해선 우선 사전정보에 대해 알아두어야 할 필요가 있습니다.
1) 사전정보
프로세스 다른 말로 프로그램이라하는 것은 서버나 클라이언트처첨 현재 실행중인 프로그램을 의미합니다.
우리가 개발 언어를 통해 작성한 프로그램 역시 프로세스로서 작동하게 됩니다.
그리고 쓰레드는 실질적으로 프로세스를 실행시키는 주체를 의미합니다.
따라서 프로세스는 절대 자체적으로 실행할 수 없고 반드시 쓰레드가 실행되어야만 실행할 수 있습니다.
마지막으로 CPU 코어 즉, 프로세서가 있습니다.
프로세서는 쓰레드를 실행시키는 주체를 의미합니다.
정리하면, 다음과 같습니다.
우리가 알고있듯이 컴퓨터는 하나의 프로세스만 실행시키지 않습니다.
메인 프로세스가 돌아가는 동안 백그라운드 프로세스가 같이 돌아가게 됩니다.
그렇다면 컴퓨터는 이를 어떻게 조작하는지 한번 알아보겠습니다.
2) 단일 코어
CPU에 하나의 프로세서만이 존재하는 것을 단일 코어라고 합니다.
하나의 프로세서만이 존재하므로 하나의 프로세스의 쓰레드만을 실행시킬 수 있습니다.
그러나 컴퓨터는 단일 코어상태에서도 여러 가지 프로세스를 동시에 수행합니다.
그 이유는 CPU가 하나의 프로세서를 사용해 여러 프로세서의 쓰레드를 하나하나 반복하며 실행하기 때문입니다.
이 속도가 매우 빨라 인간이 인식하기에 쓰레드를 동시에 여러 개 처리하는 것으로 보여지게 됩니다.
3) 멀티 코어
멀티 코어는 단일 코어를 쪼개어 여러 개의 프로세서를 만들어 작동합니다.
이로 인해 CPU의 효율이 높아지게 됩니다.
또 시각적으로만 보여지던 단일 코어와는 다르게 실제로 동시에 작업을 처리할 수 있습니다.
그러나 이런 멀티 코어에서도 쓰레드의 양이 무수히 늘어난다면 결국 코어는 한정되어 있기 때문에
단일 코어와 같은 방식으로 처리할 수 밖에 없습니다.
4) 멀티 쓰레드
멀티 쓰레드는 쓰레드를 어러 개 쪼개어 쪼개진 쓰레드별로 프로세서를 작동시키는 방식입니다.
멀티 쓰레드의 경우는 처리해야 하는 연산이 많은 MMORPG와 같은 경우 매우 적합합니다.
예시는 단일 코어로 되어있지만, 멀티 코어의 경우에도 멀티 쓰레드를 사용할 수 있습니다.
5) 멀티 쓰레드의 주의사항
멀티 쓰레드는 여러 개의 쓰레드가 작동하는 방식으로서
단일 쓰레드에 비해 연산을 병렬처리가 가능하다는 이점이 있습니다.
또한 프로세스에 비해 쓰레드를 통한 전송이 빠르므로 효율적인 통신도 가능합니다.
그러나 멀티 쓰레드를 설계하는 것은 매우 어려운 일입니다.
몇가지 멀티 쓰레드 설계 시의 주의 사항을 알려드리겠습니다.
첫번째로, 동적할당된 데이터가 보관되는 Heap 영역과 전역변수 등이 보관되는 Data 영역은 모든 쓰레드가 공유합니다.
만약 1번 쓰레드가 Data 영역의 어떤 자원을 점유하고 있다면 1번 쓰레드가 점유를 해제하기 전까지느 다른 쓰레드는 그 자원을 사용할 수 없습니다.
두번째로, 멀티쓰레드라고 해서 설계한 프로세스의 쓰레드 순서대로 연산이 이뤄지지 않습니다.
설계자가 의도한 계산 순서대호 실행되지 않아 문제가 발생할 수 있는 문제를 갖고 있습니다.
마지막으로, 프로세서가 쓰레드를 이동할 때마다 이사 비용이 발생합니다.
이사 비용이 커질수록 부하가 발생하여 이는 프로세스에 악영향을 주게 됩니다.
따라서 멀티 쓰레드를 사용하여 서버를 만들때는 반드시 주의가 필요합니다.
'컴퓨터 구조' 카테고리의 다른 글
싱글톤 패턴 (1) | 2024.11.12 |
---|---|
객체지향의 프로그래밍의 3요소 - 다형성 (0) | 2024.03.30 |
객체지향의 프로그래밍의 3요소 - 은닉성 (0) | 2024.03.30 |
객체지향 프로그래밍의 3요소 - 상속성 (0) | 2024.03.29 |
프로그래밍 개론 (0) | 2024.02.18 |