스레드 풀링

gugyeoj1n·2023년 4월 3일
0

게임 서버

목록 보기
2/3

오늘 학식으로 파절임등심돈가스를 먹었는데 진짜 맛없었다 속상해라

스레드 풀링이란

게임 서버에 멀티스레딩을 적용할 때 스레드의 개수와 그 목적을 정해 줘야 하는데, 스레드 개수를 클라이언트 개수와 일치하게 둔다면 메모리나 CPU 연산량이 초과되는 문제가 발생할 수 있다. 예시로 스레드마다 호출 스택을 갖고 있는데, 1개당 1MB 차지한다고 해도 스레드가 5000개면 메모리가 5000MB 필요해진다. 이런 상황에 스레드 풀링 thread pooling 을 사용할 수 있다.

스레드 풀링은 스레드를 풀이라는 공간에 저장해 재사용을 가능하게 한다. 이벤트가 들어오면 풀에 있는 스레드 하나를 할당시키고 작업이 끝나면 다시 풀에 반환되는 것이다.

스레드 개수가 많으면 앞서 얘기한 문제점이 생기고, 반대로 스레드 개수가 CPU 개수보다도 적다면? 모든 스레드를 병렬로 실행한다 해도 CPU 개수에 따른 최대 처리 능력을 다 사용하지 못하게 된다. 그래서 스레드 개수에는 엄격한 규칙이 필요하다. 만약 서버의 주 역할이 CPU 연산만 하는 것이라면 스레드 풀에 CPU 개수와 동일한 수의 스레드만 갖고 있어도 된다. 하지만 데이터베이스나 파일 시스템 등에 접근하여 디바이스 타임이 발생하는 경우 스레드 개수를 CPU 개수보다 많게 책정해야 한다.



아졸려

0개의 댓글