문제

http 헤더에 대해 매우 기본적인 처리를 수행하는 간단한 http 프록시 서버를 만들고 싶습니다 (즉, 헤더 x== y이면 z를 수행합니다).서버는 수백 명의 사용자를 지원해야 할 수 있습니다.C # (매우 쉬움) 또는 C ++ (훨씬 더 어렵게)로 서버를 작성할 수 있습니다.그러나 C # 버전은 C ++ 버전만큼 성능이 좋습니까?그렇지 않다면 C #으로 작성하는 것이 말이되지 않을 정도로 성능 차이가 클까요?

도움이 되었습니까?

해결책

중요한 병목 지점에서 안전하지 않은 C # 코드와 포인터 를 사용하여 더 빠르게 실행할 수 있습니다.그것들은 C ++ 코드와 매우 유사하게 작동하며 빠르게 실행된다고 생각합니다.

그러나 대부분의 경우, C #은 이미 JIT-ted to uber-fast입니다. 나는 모든 사람들이 말한 것과 같이 많은 차이가있을 것이라고 믿지 않습니다.

하지만 고려할 수있는 한 가지는 관리 코드 (C #) 문자열 작업이 C ++에서 포인터를 효과적으로 사용하는 것에 비해 다소 느립니다. CLR 문자열보다 C ++ 포인터를 사용하는 최적화 트릭이 더 많습니다..

이전에 몇 가지 벤치 마크를 수행 한 것 같지만 어디에 두 었는지 기억이 나지 않습니다.

다른 팁

C ++ 애플리케이션에서 훨씬 더 높은 성능을 기대하는 이유는 무엇입니까?

올바르게 수행 할 때 C # 응용 프로그램에 의해 추가되는 고유 한 속도 저하가 없습니다.(너무 많은 참조 삭제, 빈번한 객체 생성 / 호출 당 삭제 등)

C ++ 애플리케이션이 동등한 C # 애플리케이션을 실제로 능가하는 유일한 경우는 (매우) 낮은 수준의 작업을 수행 할 수있을 때입니다.예 :원시 메모리 포인터 캐스팅, 인라인 어셈블러 등

C ++ 컴파일러는 빠른 코드를 만드는 데 더 좋을 수 있지만 대부분의 응용 프로그램에서 낭비됩니다.응용 프로그램의 일부가 눈부시게 빨라야하는 경우 해당 핫스팟에 대한 C 호출을 작성해보십시오.

대부분의 시스템이 너무 느리게 작동하는 경우에만 C / C ++로 작성하는 것이 좋습니다.그러나 C ++ 코드에서 성능을 저하시킬 수있는 많은 함정이 있습니다.

(TLDR : C ++ 전문가는 C # 전문가로서 '더 빠른'코드를 만들 수 있지만, 평범한 C ++ 프로그래머는 평범한 C #보다 느린 코드를 만들 수 있습니다.)

C # 버전은 C ++ 버전만큼 빠르지 만 메모리 공간은 더 작을 것으로 예상됩니다. 어떤 경우에는 관리 코드가 실제로 훨씬 빠르며 최적화되지 않은 C ++에 비해 메모리를 적게 사용합니다.C ++ 코드는 전문가가 작성하면 더 빠를 수 있지만 노력을 정당화하는 경우는 거의 없습니다.

참고로 Michael Kaplan (C #)과 Raymond Chan (C ++) 사이의 블로고 스피어에서 프로그램을 작성하기 위해 수행 한 "경쟁"이 정확히 똑같은 일을하는 것을 기억할 수 있습니다.세계 최고의 프로그래머 중 한 명으로 여겨지는 Raymond Chan (Joel)은 대부분의 코드를 다시 작성하는 오랜 노력 끝에 더 빠른 C ++ 작성에 성공했습니다.

당신이 설명하는 프록시 서버는 대부분 문자열 데이터를 다루며 C #으로 구현하는 것이 합리적이라고 생각합니다.귀하의 예에서 라코 디스

가장 느린 부분은 실제로 'z'가 무엇이든 할 수 있으며 언어에 관계없이 해당 작업을 수행해야합니다.

내 경험상 디자인과 구현은 언어 / 프레임 워크를 선택하는 것보다 성능과 훨씬 더 관련이 있습니다 (그러나 일반적인 경고가 적용됩니다 : 예를 들어 C # 또는 자바로 장치 드라이버를 작성하지 마십시오)./ p>

관리 언어 (Java, C # 등)로 설명하는 프로그램 유형을 작성하는 것에 대해 두 번 생각하지 않습니다.요즘에는 낮은 수준의 언어 (하드웨어와의 근접성)를 사용하여 얻을 수있는 성능 향상이 관리 환경의 런타임 기능으로 쉽게 상쇄되는 경우가 많습니다.물론 이것은 C # / python 개발자로부터 온 것이므로 편견이 없습니다 ...

빠르고 안정적인 프록시 서버가 필요한 경우 이미 존재하는 프록시 서버를 사용해 보는 것이 좋습니다.그러나 필요한 사용자 지정 기능이있는 경우 직접 구축해야 할 수 있습니다.예상되는로드에 대해 더 많은 정보를 수집 할 수 있습니다. 수백 명의 사용자가 분당 몇 번의 요청 또는 초당 100 번의 요청 일 수 있습니다.

단일 머신에서 200qps 이하 또는 약 200qps를 제공해야한다고 가정하면 C #은 사용자의 요구를 쉽게 충족 할 수 있습니다. 느린 것으로 알려진 언어 (예 : Ruby)도 초당 수백 개의 요청을 쉽게 펌핑 할 수 있습니다.

성능 외에도 C #을 선택해야하는 다른 이유가 있습니다.C #보다 C ++에서 버퍼 오버 플로우를 작성하는 것이 훨씬 쉽습니다.

http 서버가 전용 시스템에서 실행됩니까?그렇다면 C #을 사용하는 것이 더 쉽습니다.동일한 컴퓨터에서 다른 애플리케이션을 실행해야하는 경우 애플리케이션의 메모리 사용량과 GC가 "무작위"시간에 실행된다는 사실을 고려해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top