C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[10979] Re: C++Builder로 고성능 소켓 서버를 만드는데 참고할 몇가지들....
박지훈.임프 [cbuilder] 2360 읽음    2001-09-12 02:04
임프랍니다.

Win32에서 소켓서버의 성능이 중요한 상황이라면, 역시 IOCP(IO Completion Port)를 쓰는 것이 최고입니다.
저번 C++Builder 워크샵에서 이에 대해 주제 발표를 했는데, 빌더의 기본 서버 소켓과 인디, 그리고 IOCP를
이용했을 때의 성능차이를 한동훈님이 간단한 테스트를 통해 발표했었습니다.

그때 테스트의 결과는.. 기본 서버 소켓의 경우 1700정도, 인디가 2100정도, IOCP는 5000개 이상의 연결을
받았습니다. 특히 다른 테스트에서는 CPU 점유율이 30퍼센트 정도였는데, IOCP에서는 훨씬 많은 연결을
받으면서도 CPU 점유율은 20퍼센트 아래였습니다.

테스트 결과는 여기 일반자료실에 있습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_res&no=68

워크샵이 끝난 후 다시 한번 IOCP를 테스트했었는데, 최고 1만 커넥션까지 올라가더군요. 1만 커넥션에서
하드웨어의 한계로 더 이상 연결을 받지 못했습니다. 참고로 저희가 테스트한 서버는, 사내에서 순수히
테스트용으로만 사용하는 조립 피시 서버입니다.

물론, 테스트한 방법이나 하드웨어 사양, 그리고 평가에서 중요시한 관점에 따라 약간씩의 차이는 날 수
있습니다. 하지만 IOCP가 궁극의 솔루션이라는 것은 틀림없죠.

단지.. IOCP를 쓰려면, 코딩이 대단히 복잡해지는 것이 단점입니다.
쉽게 보고 프로젝트에 적용하려고 덤볐다간 큰코다칩니다.
코드 샘플을 보시려면, MSDN에서 IOCP로 검색해보시면 거의 그대로 빌더에서 컴파일할 수 있는 소스가
있습니다.

참고로 말씀드리면.. 구조적으로 간단하고 논리정연하게 만들기 위해 쓰레드로 동작하는 블러킹 방식의
소켓 서버를 만들게 되면, 모든 소켓 연결마다 쓰레드를 하나씩 생성하게 되는데, 빌더나 비주얼C++에서
기본 설정 그대로로는 프로세스당 2000개 정도의 쓰레드밖에 만들지 못합니다. 쓰레드마다 1M씩의 스택을
먹어서 메모리 부족으로 쓰레드 생성이 안되죠.

이에 대한 해결책은 팁 게시판에 올려져 있습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=186

아, 또 한가지 참고로 말씀드리면...
아직 정확히 확인이 안되었기 때문에 장담은 할 수 없지만, VCL의 소켓 컴퍼넌트에는 아주 작은 버그가
있습니다. 이 버그때문에 몇천 연결 당 하나 정도의 찌꺼기 같은 것이 남습니다. 그래서, 아주 많은 연결을
아주 자주 받고, 또 아주 오랫동안 동작해야 하는 소켓 서버에서는 VCL 서버소켓을 써서는 안됩니다.
물론 웬만한 서버에서는 별 상관없습니다. 인디의 컴퍼넌트들은 모두 이 문제를 해결한 것으로 알고 있습니다.

그럼 이만...


박정만 님이 쓰신 글 :
: 빌더의 소켓컴포넌트로 서버 클라이언트를 짜고 있는 중에, MFC의 CSocket의 성능이 형편없다고 들어서 충격 먹고 있는 중입니다.
:
: VCL의 소켓 컴포넌트의 성능은 어떠한가요? 포트리스와 동등한 성능의 서버를 짤 수 있을까요?
: 포트리스는 서버당 4000개의 클라이언트를 수용한다고 들었습니다.
:
: 그것이 가능하다면 MFC의 CSocket이랑 무엇이 다르기 때문인가요? 둘 다 메세지 처리 방식이라고 아는데..
: 답변 부탁드립니다.

+ -

관련 글 리스트
10954 [질문] 빌더의 소켓 컴포넌트의 성능... 박정만 946 2001/09/11
10979     Re: C++Builder로 고성능 소켓 서버를 만드는데 참고할 몇가지들.... 박지훈.임프 2360 2001/09/12
10969     Re:[질문] 빌더의 소켓 컴포넌트의 성능... 공동현 1274 2001/09/11
10968     Re:[질문] 빌더의 소켓 컴포넌트의 성능... 박세호 1189 2001/09/11
10955     Re:[질문] 빌더의 소켓 컴포넌트의 성능... ... 1179 2001/09/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.