본문 바로가기
게임 공부/게임 개발 일지

비동기 소켓과 멀티 스레딩을 활용한 소켓 함수 사용의 차이

by woohyeon 2021. 5. 30.
반응형

비동기 소켓 혹은 멀티 스레딩으로 소켓 함수를 제어하는 것의 차이점

1개의 서버에 5개의 클라이언트가 있다고 가정해보면, 서버는 5개의 클라이언트에 대한 소켓을 각각 가지고 있을 것이다. 만약 5개의 클라이언트로부터 패킷을 받기 위해 recv를 호출한다고 생각해보자. recv는 기본적으로 블로킹 모드이므로 패킷을 받지 못하면 호출 스레드는 블로킹 상태에 빠진다. 즉 현재 작업을 완료하기 전까지 다른 소켓에 대해 recv를 수행할 수 없다. 때문에 각 소켓마다 스레드를 할당하여 recv를 담당하도록 해야 한다.

이는 클라이언트 수가 증가할 수록 서버가 대처하기 힘들어진다. 스레드가 많아지면 다루기 힘들어 질 뿐만 아니라
context switch 비용도 고려해야 한다고 생각된다. 한편, 비동기 소켓은 다수의 패킷들이 병렬적으로 들어오더라도 블로킹없이 select와 같은 함수를 이용하면 사용할 수 있는 소켓들만 얻을 수 있게 된다.




댓글