서버 프로그래밍

폴(Poll) 방식의 네트워크 처리 구현

하늘흐늘 2021. 11. 2. 12:35
반응형

폴(Poll) 방식의 네트워크 처리란 쉽게 말하여 주기적으로 소켓에 데이터가 왔는지를 체크하고 처리하는 방식입니다. 보통 처리 방식을 슈도 코드로 나타내면 아래와 같을 것입니다.

while(true)
{
	bool data_recieved = 소켓에 받은 데이터가 있는지 체크(); 
	if (data_recieved) 
	{
		소켓 데이터 처리();
	}
	소켓처리 외의 로직();
}

이런 방식을 사용하는 이유는 네트워크 처리 외의 로직을 네트워크 처리 쓰레드에서 함께 하기 위함입니다. 물론 이런 폴(Poll) 방식를 사용하지 않고 네트워크 처리 쓰레드와 네트워크 처리 외의 로직 쓰레드를 분리하여 처리하고 양쪽 쓰레드들에서 사용하는 공유 객체와 같은 경우 동기화 처리를 할 수도 있습니다. 
이런 폴(Poll) 방식을 이용하면 네트워크 IO는 멀티쓰레드로 받은 네트워크 데이터 처리와 로직 처리를 싱글쓰레드로 처리할 수 있습니다. 
(전문 용어로 Half Async, Half Sync라고 합니다.) 

이런 폴(Poll) 방식은 전통적인 BSD 소켓에서는 논블로킹 소켓을 응용하거나 Select를 사용하여 구현할 수 있습니다. IOCP, ePoll 같은 멀티쓰레드 비동기 이벤트 방식에서는 큐를 만들고 받은 데이터를 큐에 넣은 뒤 위의 코드 예제처럼 로직 쓰레드에서 큐에 데이터가 있는지를 체크하여 큐의 데이터를 실행하는 방식으로 구현할 수 있습니다. 

 

반응형