Windows 10 Redstone빌드에선 UWP에서도 IOCP를 사용할 수 있게 될듯?

지난 10여년간 수많은 온라인 게임 서버가 Windows NT의 스레드풀 API – I/O Completion Port(이하 IOCP)를 사용해왔다.
그 중에는 IOCP를 사용해서 서버/클라이언트 공용 네트워크 라이브러리를 구현한 경우도 있을 것이다. 바로 내가 그렇게 구현해서 사용해왔다.

매우 유용하게 잘 사용해왔으나 Windows Store App이 처음 나왔을때, 그러니까 Windows 8의 WinRT API였을때 이 바보같은 API는 winsock과 thread API들을 지원하지 않았다.

그리고 Windows 10의 UWP API에 이르러서야 winsock과 thread API들을 지원했다.
다만 IOCP는 여전히 지원하지 않았다. 기존에 데스크탑용으로 만든 네트워크 라이브러리 코드는 UWP용으로는 사용할 수 없었다.

그러던것이 올해 여름에 업데이트 되는 Windows 10 Redstone빌드(공식 네이밍은 Windows 10 Anniversary Update)에선 드디어 지원되는 모양이다.

물론 MS는 이 얘길 한마디도 꺼낸적이 없다. 뭐 이전에 Windows 10 발표하면서 UWP에서 winsock지원할때도 아무 얘기도 안했다. 뭔가 인정하고 싶지 않아서 그런건지 쓰지 말라는 의미인건지..-_-

하여간 나는 IOCP가 언젠가 UWP에서 지원될거라고 확실히 믿어왔기 때문에, 그리고 Windows 10에 이르러 winsock과 thread api를 지원했으니 이쯤이면 IOCP도 지원하지 않을까 해서 테스트를 해봤다.

IOCP 오브젝트는 CreateIoCompletionPort()함수를 호출해서 만든다.
이 함수가 호출 가능한지를 테스트 해보면 된다.

간단한 UWP프로젝트를 하나 만든다. 타겟 빌드는 10.0.10586.0 현재 Windows 10의 정식 빌드이다.그리고 CreateIoCompletionPort()를 호출해본다.
예상하듯 다음과 같이 빌드에 실패한다.
그런 함수 없댄다.

CPIO_10586

 

빌드 타겟을 바꾼다. Redstone빌드로. 물론 사전에 Redstone SDK는 설치되어있어야한다. 현재 내 머신에는 Windows 10 Preview SDK 14332가 설치되어있다.

CPIO_target_14332

 

그리고 다시 빌드. OK. 빌드 잘 된다.

CPIO_14332

만세~
이제 기존에 만든 온라인 게임용 네트워크 라이브러리를 거의 수정하지 않고 UWP로 가져올 수 있게 됐다.

아마도 GDI를 제외한 거의 모든 win32 API는 UWP API로 돌아오게 될 것이다. MS가 왜 이런걸 하느냐고 하면 데스크탑 어플리케이션 수준의 성능을 가지는 UWP앱의 필요성을 느끼기 때문이다.
최근 AAA PC/콘솔 게임들이 UWP로 출시되고 있는데 이것도 다른 맥락이 아니다.
그리고 이런 대작 게임이나 다양한 기능을 가진 어플리케이션들이 UWP앱으로 출시되려면 API개선이 필요하다. 이제는 MS도 이 점을 받아들이기로 한것 같다.
이젠 UWP로 뭘 좀 해볼 수 있을것 같다.


답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중