반응형
비동기 소켓 혹은 멀티 스레딩으로 소켓 함수를 제어하는 것의 차이점
1개의 서버에 5개의 클라이언트가 있다고 가정해보면, 서버는 5개의 클라이언트에 대한 소켓을 각각 가지고 있을 것이다. 만약 5개의 클라이언트로부터 패킷을 받기 위해 recv
를 호출한다고 생각해보자. recv
는 기본적으로 블로킹 모드이므로 패킷을 받지 못하면 호출 스레드는 블로킹 상태에 빠진다. 즉 현재 작업을 완료하기 전까지 다른 소켓에 대해 recv
를 수행할 수 없다. 때문에 각 소켓마다 스레드를 할당하여 recv
를 담당하도록 해야 한다.
이는 클라이언트 수가 증가할 수록 서버가 대처하기 힘들어진다. 스레드가 많아지면 다루기 힘들어 질 뿐만 아니라context switch
비용도 고려해야 한다고 생각된다. 한편, 비동기 소켓은 다수의 패킷들이 병렬적으로 들어오더라도 블로킹없이 select
와 같은 함수를 이용하면 사용할 수 있는 소켓들만 얻을 수 있게 된다.
'게임 공부 > 게임 개발 일지' 카테고리의 다른 글
세 종류의 라이팅 구현 (1) - 소개 | Directional Light, Point Light, Spot Light (0) | 2021.08.05 |
---|---|
현재 라이팅 문제점 (1) (0) | 2021.07.17 |
[DX] 카메라 클래스 설계 및 구현 (0) | 2021.05.04 |
assimp를 이용하여 3D 메쉬 가져와서 렌더링 해보기 (0) | 2021.04.08 |
카메라(eye) 이동 및 회전 (0) | 2021.03.24 |
댓글