소켓의 성능 및 퍼포먼스에 관련된 질문입니다.

3권에서 새로 도입된 네트웍 및 멀티플레이어 프로그로그래밍 섹션을 위한 게시판입니다.

Moderator: 류광

Locked
비회원

소켓의 성능 및 퍼포먼스에 관련된 질문입니다.

Post by 비회원 »

제가 C로 소켓 프로그래밍을 하면서 문득 생각이 든건데,

C#과 Java는 C에 비해서 많이 후달리는지가 궁금했습니다.

C같은 경우는 멀티플렉싱이나, 멀티쓰레드 기반 소켓이라던가.. 심지어는 IOCP까지 다양한 퍼포먼스를 지원하는데

자바나 C#의 경우는 일원화된 소켓 퍼포먼스만 지원하는 것 같아서 뭔가 조금 안습하지만,

최근에 들은 얘기로는 프리서버의 소켓 대부분이 자바 소켓을 쓴다고 들었습니다.

프리서버지만 그래도 명색이 온라인게임 서버인데 그 서버 소켓을 자바 소켓으로도 가능한지가 의문이네요.

일반적으로 IOCP많이 쓰잖습니까..

몇천명정도는 멀티플렉싱같은 것으로도 구현가능하려나요?

그리고 자바에서도 대형 서버 제작할때는 멀티쓰레드기반 소켓을 구현해서 쓰나요?

제가 소켓 프로그래밍하는데, IOCP를 쓰기엔 너무 큰 것 같고, 편하게 멀티플렉싱을 쓰고 싶은데

이게 어느정도의 성능이 되는지 궁금하네요..
리안
Posts: 40
Joined: 2005-07-14 14:52
Location: Relic Entertainment
Contact:

C#에서도 IOCP 사용할 수 있습니다.

Post by 리안 »

http://www.devarticles.com/c/a/C-Sharp/ ... rp-Part-I/
http://www.devarticles.com/c/a/C-Sharp/ ... p-Part-II/

문제는 특정 IO 모델을 지원하느냐 안하느냐라기 보다는 메모리 관리 차원에서 발생하지 않을까 합니다.
C++을 쓰면 프로그래머 마음대로 메모리를 관리할 수 있기에 이와 연관된 작업들을 최적화하기가 용이합니다.
물론 프로그래머가 메모리(생성/해제) 작업을 일일히 관리를 해주어야 하지요.

반면, C#은 GC(Garbage Collector)가 메모리를 모두 관리하므로 상황에 맞게 커스터마이징 하기가
어려울 수 있습니다. 그러나 메모리 작업은 그냥 신경꺼도 되므로 개발이 훨씬 쉬워지게 됩니다.
자바는 안써봐서 모르겠습니다만 결국 언어가 알아서 메모리를 관리해주면 비슷한 상황일 것이라 생각합니다.

결국 성능과 편의성의 트레이드 오프라고 생각되며 자신이 필요한 성능을 미리 예상하고 이를 얻을 수 있는
가장 쉽고 간단한 방법을 찾으면 될거 같습니다. :)
Stay Hungry. Stay Foolish.

http://blog.naver.com/ryanii
Locked