MMORPG 아주 간단한 질문

bookgekgom의 이미지

유저가 1000 명이라고 치고 data 의 크기가 대략 5 킬로 바이트라고 칠때

룹을 통하여 1 -> 1000 명에게 게임 정보를 전달하는것과

예)

Thread{
      for(int i=0;i<1000;i++){
           peers[i].send(data);
       }
}

멀티캐스팅을 통해 한번에 1000 명에게 정보를 보내는것의 속도 차이가 큽니까?

궁금함...

chadr의 이미지

구현에 따라서 좀 달라질수 있겠습니다. 멀티캐스팅은 스레드를 이용해 동시에 여러개
소켓에 데이터를 전송하는 구현인가요? 일단 그렇게 이해하고 이야기 하겠습니다.
룹을 돌든 멀티캐스팅을 하든간에 결국에 보내는 건 컴퓨터이고 소켓버퍼에 있는 것을
보내는 것입니다. 상대방이 느려서 빠르게 보낼수 없으면 소켓버퍼가 항상 풀일것이고
그동안은 해당 컴퓨터에게는 못보냅니다. 이때는 두 방법간의 차이는 무의미 해지게 됩니다.
어느 방법이든 못보내는건 마찬가지이니까요.

룹을 돌더라도 이런 상황에 대해서 처리를 해주면 그렇게 느리진 않습니다.
하지만 send를 호출하는 횟수가 많기 때문에 그만큼 커널모드로 들어가는 경우가 많아져
비효율적일 수도 있겠습니다. 이때는 차라리 몇개의 스레드에서 나눠 보내는 것이 커널모드
진입으로 인한 성능저하를 막을수 있겠습니다만... 과연 네트워크 속도가 프로세스가 커널모드로
들어갔다 나오는 만큼 빠르지는 않을것 같습니다. 하지만 이런 방법은 lan카드가 데이터를 전송하는동안
cpu는 다른 일을 할 수 있으므로 별도로 동작하는 cpu와 lan카드의 성능을 최대한 이용할 수 있는 방법입니다.

가장 최상의 성능을 내는 방법은 cpu가 lan카드에게 데이터 전송을 요청하고 나머지 프로세스는 lan카드가
처리하며 처리 하는 동안은 cpu가 다른 일을 하는 경우입니다. 이런 경우가 이상적으로 발생하면 좋겠지만
아시다시피 컴퓨터에서 cpu만큼 빠른 기기는 없습니다. 그렇기 때문에 아무리 스레드로 나눠서 멀티캐스팅을
한다고 해도 cpu는 놀게 되는 시간이 많아지게 됩니다. 이렇게 된다면 두 방법은 어느걸 쓰든간에 느린건
마찬가지게 됩니다. cpu의 요청을 lan카드가 모두다 수용할수 없기 때문이지요.

설명이 장황했는데 결론은.. 거의 차이 없을것 같습니다. 실제로 테스트를 해봐야 알겠지만요.
대신 두 방법 모두 비동기모드로 소켓을 생성하고 소켓 버퍼가 꽉차 못보낼 경우 다른 소켓으로 바로
넘어가 전송해주고 못보낸 소켓은 추후에 보내는 전략을 사용하시는 것이 좋을것 같네요. 그리고 남는 시간은
cpu가 다른 일을 하도록 하는 것이 훨씬 이득입니다.

ps. lan카드가 여러개 달려있으며 각각 라인을 따로 물고 있는 경우라면 달라집니다. 이럴때는 여러개
스레드로 동시에 전송하는 것이 훨씬 더 빠릅니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

bookgekgom의 이미지

답변 감사드립니다.
---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.

http://jihwankim.co.nr

여러 프로그램 소스들이 있습니다.

필요하신분은 받아가세요.

다즐링의 이미지

멀티캐스팅은...

아마 허용된 네트웍이 별로 없을껍니다.

5K * 1000 이면... 5000Kbyte 면.. 5메가바이트정도밖에 안됩니다.

랜카드 몇개따로할 레벨은 아닙니다. ( 2009년 기준입니다. )

------------------------------------------------------------------------------------------------
Life is in 다즐링

------------------------------------------------------------------------------------------------
Life is in 다즐링