goguelike의 네트웍 속도
By SeukWon Kang
일단 python에서 네트웍 속도로 이것 저것 해본 글들 http://kasw.blogspot.kr/search/label/wxgame
goguelike를 튜닝하던 중에 네트웍 패킷 처리량이 얼마나 되나 하고 테스트 해보니 20000 packet/sec 정도 밖에 안나와서 충격을 먹고 네트웍 부분을 집중적으로 검사및 튜닝을 한 이야기..
결론만 말하면 go 언어의 능력이면 1000 클라이언트 ( 10000클라이언트 에서도 속도 저하는 10% 이하) 에서 150000 패킷 / 초 정도를 처리 할 수 있습니다.
파이썬에선 정말로 최후까지 쥐어 짜야 60000넘기는 것도 힘들었던것에 비하면 깨끗한 구조를 유지하면서도 2.5배 이상의 성능을 낼수 있는 것이지요. ( go 언어는 cpu를 모두 사용하고 python은 cpu를 한개만 사용가능했으니 실제 성능 차이는 없다고 볼수도 있겠습니다. ;; )
좀더 정확히 말하면 한개 기계에서 테스트할때 150000정도가 나왔으며 ( 테스트 클라이언트가 cpu를 사용하니 1.5배 이상 향상될 여지가 있습니다. ) 두개의 기계를 사용해서 테스트하면 80000을 넘지 못하더군요. ( 기가빗 네트웍으로 연결되어 있음에도. )
양쪽 기계의 상태를 보면 여유가 있었고, 생각해보면 제가 쓰는 공유기의 패킷 처리량을 넘었기 때문이라고 생각하고 있습니다.
아무튼 아직도 여지가 남아있지만 네트웍 처리 goroutine을 분리, logic입장에서 nonblocking, async로 처리하도록 하는 상태에서도 충분한 성능이 나온다고 볼수 있겠습니다.
참고로 이 테스트는 모두 connected tcp client 를 가정하고 한 테스트고 따라서 http 테스트와는 비교가 불가능합니다.
일단 github에 올려 두었습니다. https://github.com/kasworld/netspeed