thread(2)
-
[게임서버프로그래밍#3] Overlapped I/O
이 글에서는 Windows 환경에서 고성능 네트워크 통신을 위해 사용되는 Overlapped I/O를 설명한다.기존 비동기 방식의 한계를 보완하며, CPU 낭비를 줄이고 I/O 효율을 높이는 방법과 주의사항까지 구체적으로 다룬다. 비동기 처리 방식의 문제점기존 비동기 처리(select + socket + thread)에서는 다음과 같은 문제점이 존재한다.메모리 복사 비용:send() 같은 socket 내부 함수 호출 시 메모리 복사가 발생한다.불필요한 재시도 호출:송수신 버퍼에 1바이트라도 여유가 있으면 send()나 recv()를 호출하려 하지만, 실제로 데이터를 보내거나 받을 수 없는 경우가 발생한다.CPU 낭비:데이터를 보낼 수 없는 상황에서도 API 호출을 반복하면서 CPU 자원을 낭비하게 된다..
2024.06.04 -
[게임서버프로그래밍#5] 멀티스레드 Client-Server 구현 (feat: mutex, chrono)
이 글에서는 서버가 여러 클라이언트의 요청을 동시에 처리하기 위해 멀티스레드를 사용하는 방법을 설명한다. 멀티스레드 환경에서 발생하는 자원 충돌 문제를 막기 위해 mutex(뮤텍스)를 사용하고, 통신 타임아웃 처리를 위해 chrono를 적용하는 방법도 함께 다룬다. 멀티스레드가 필요한 이유하나의 서버 소켓이 다수 클라이언트와 통신할 때, 동시 접속 요청을 처리하려면 스레드가 필요하다.스레드를 사용하지 않으면 하나의 클라이언트 처리가 끝날 때까지 다른 클라이언트는 대기해야 한다. Thread 기본 개념스레드는 하나의 프로세스 안에서 독립적으로 실행되는 흐름이다.스레드들은 Heap 영역, 전역 변수, 파일 핸들 등을 공유한다.문제점:자원을 공유하기 때문에 여러 스레드가 동시에 같은 데이터에 ..
2024.06.02