인프런 커뮤니티 질문&답변

mhyim님의 프로필 이미지
mhyim

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Listener

동기방식과 비동기 방식 비교

작성

·

25

·

수정됨

0

루키스님 안녕하세요?

소켓 함수쪽에서 동기방식과 비동기방식의 장단점을 고찰하고 있습니다.

 

이번 강의에서 Listen쪽을 동기 -> 비동기로 전환하면서 논블로킹 성질로 인해 어느 누군가의 입장 지연 등을 기다려도 않아도 되므로 그런 부분에서 이점이 있다.

이렇게 이해를 하였는데요,

 

입장자 별로 스레드를 부여하여 동기적으로 입장시킴. 단, 너무 지연이 되면 해당 스레드는 종료 등으로 처리.

이런 식으로 동기적 방법을 고수하면 콜백 함수 없어도 되니까 코드 복잡도도 줄고 컨텍스트 스위칭도 덜 일어나지 않을까? 라는 생각을 하게 되었습니다.

 

그러므로 동기적으로 소켓 함수를 계속 사용하는 것은 잘못된 생각인지, 아니면 비동기 동기가 각각 장단점이 있는 방식인지 루키스님 조언 얻으려고 질문 드립니다.

 

답변 미리 감사합니다.

 

+수정

이 내용과 같은 맥락일까요?

그렇다면 Listen과 Accept는 동기, Send와 Receive는 비동기로 처리 이런 방식은 어떤지 고민도 되고 하네요

https://www.inflearn.com/community/questions/140160/%EA%B5%B3%EC%9D%B4-%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B0%A9%EC%8B%9D%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. mhyim님.

동기 방식과 비동기 방식에 대한 질문을 주셨군요. 각각의 방식은 장단점이 있어 상황에 따라 적절히 선택할 필요가 있습니다.

동기 방식의 장점

동기 방식은 이해가 쉽고, 코드가 직관적이며 단순 명료합니다. 입문자들이나 복잡한 비동기 처리를 피하고 싶을 때 적합할 수 있습니다. 컨텍스트 스위칭이 덜 발생할 수 있으며, 디버깅이 비교적 쉽다는 이점이 있습니다.

동기 방식의 단점

하지만, 동기 방식은 하나의 작업이 완료될 때까지 다른 작업이 대기해야 하므로 전체적인 반응성이 떨어질 수 있습니다. 특히, 네트워크나 I/O 작업이 오래 걸릴 경우 시스템이 멈춘 것처럼 보일 수 있습니다. 이는 사용자 경험에 매우 부정적인 영향을 미칠 수 있습니다.

비동기 방식의 장점

비동기 방식은 복잡한 어플리케이션에서 서버의 성능과 반응성을 높이는데 매우 유용합니다. 비동기 방식은 대기 상태를 줄여 동시에 많은 클라이언트를 처리할 수 있는 이점을 제공합니다. 이는 특히 MMORPG와 같은 대규모 게임 서버에서 필수적일 수 있습니다.

비동기 방식의 단점

반대로, 비동기 처리는 코드가 복잡해질 수 있고 디버깅이 까다로워질 수 있습니다. 적절한 에러 처리를 설계하는데 신경을 많이 써야 하며, 호출되는 콜백 함수들이 많아지면 유지보수가 어려워질 수 있습니다.

Rookiss 강사님이 구체적인 유사한 질문에 대한 답변을 해주신 적이 있는데, Listener와 Session 강의를 들으면서 정리한 개념이 맞는지 알고 싶습니다에 대한 대화를 참고해보시면 도움이 될 것입니다.

결론적으로, 특정 상황에 따라 동기 방식과 비동기 방식을 적절히 선택 및 조합하여 활용하는 것이 가장 최선의 선택이 될 수 있습니다. 비동기 방식은 특히 서버의 성능과 확장성을 염두에 둘 때 유용하므로, 장기적인 관점에서의 서버 개발을 염두에 두셨으면 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

mhyim님의 프로필 이미지
mhyim

작성한 질문수

질문하기