멀티코어
멀티쓰레드 프로그래밍은 어디서 사용되고 있는가?
원택
2020. 9. 13. 21:20
실제 멀티쓰레드 프로그래밍은 어디서 사용되고 있는가?
- 과학기술계산
- 멀티미디어
- 동영상 인코딩, 디코딩
- 멀티쓰레드 구현이 매우 쉬움 (독립된 키프레임)
- 게임
멀티쓰레드 프로그래밍의 종류
- Heterogeneous multithread
- 쓰레드마다 하는 역할이 다르다. (Renderer 쓰레드, AI 쓰레드, 오디오 쓰레드 등등)
- 각 쓰레드마다 다른 파트를 실행
- 쓰레드간의 Load Balancing이 힘들다. (Renderer 쓰레드가 하는일을 Game 쓰레드한테 할당못함)
- 병렬성이 제한된다.
- Homogeneous multithread
- 쓰레드가 같은역할을 한다. ( worker 쓰레드 같은경우 노는 쓰레드가 없다.)
- Data / Event driven 프로그래밍 ( ※Event란 이미 발생한 현상)
- 모든 쓰레드는 Symmetric 하다.
- 역할 구분이 없고 가능한 순서대로 인풋을 처리한다.
- 제한없는 병렬성, 자동적인 Load Balancing
- 작업분배 큐를 비롯한 일반적인 병렬 자료구조 필요
MMORPG Game Server
MMORPG 게임 서버의 구현
- 윈도우에서 제공하는 멀티쓰레드 + Network I/O api인 IOCP 사용
- Time Consuming 작업 및 블로킹 작업들의 재배치
- Homogeneous Multithreading
- Worker thread의 풀을 사용
- 네트워크 데이터 처리 뿐만 아니라 AI루틴도 Worke thread에서 처리
- 멀티쓰레드 트릭 : 데이터베이스 쿼리
- 문제: 데이터베이스 쿼리는 쓰레드의 블로킹을 초래
- 해결: 블로킹 전용 쓰레드를 따로 두어서, 작업 전달
(별도의 쓰레드가 DB에서 정보를 꺼냄 호모지니어스 멀티쓰레딩을 위해선 워커쓰레드는 절대 멈추지 않음.)
- 멀티쓰레드 트릭 : NPC AI
- 문제: NPC가 너무 많다.
- 해결 Timer Thread를 사용하여, 활성화된 NPC의 이벤트만 처리
MMORPG 게임서버의 특징
- Worst Case Tuning
- 평상시의 cpu 낭비 ok, 최대 부하일때 잘 버티는 프로그램이 최고
- 컨테이너 자료구조를 사용한 객체간 동기화
- 큐, 우선순위 큐, set
- 커스텀 자료구조
- 1 write / multi reader queue
- multi write / 1 reader priority queue
- set copy method
출처
한국산업기술대학교 게임공학부 정내훈 교수님 강의 - 멀티코어 프로그래밍