2009-11-10 2 views
24

멀티 코어 4 웨이 서버에서 실행되는 대형 멀티 스레드 C# 응용 프로그램이 있습니다. 현재 우리는 "서버 모드"가비지 수집을 사용하고 있습니다. 그러나 테스트 결과 워크 스테이션 모드 GC가 더 빠릅니다."워크 스테이션"가비지 수집 또는 "서버"가비지 수집을 사용해야합니까?

MSDN says : 서버 API를 사용

관리되는 코드 응용 프로그램은 서버에 최적화 된 가비지 컬렉터 (GC) 대신 기본 워크 스테이션 GC를 사용하여 상당한 혜택을받을 수 있습니다.

워크 스테이션은 기본 GC 모드이며 단일 프로세서 컴퓨터에서만 사용할 수 있습니다. 워크 스테이션 GC는 콘솔 및 Windows Forms 응용 프로그램에서 호스팅됩니다. 실행중인 프로그램과 동시에 전체 (2 세대) 모음을 수행하므로 대기 시간이 최소화됩니다. 이 모드는 클라이언트 응용 프로그램에 유용합니다. 클라이언트 응용 프로그램에서는 인식 성능이 일반적으로 원시 처리량보다 더 중요합니다.

서버 GC는 다중 프로세서 컴퓨터에서만 사용할 수 있습니다. 각 프로세서에 대해 별도의 관리되는 힙 및 스레드를 만들고 병렬로 컬렉션을 수행합니다. 수집 중에는 관리되는 모든 스레드가 일시 중지됩니다 (원시 코드를 실행하는 스레드는 원시 호출이 반환 될 때만 일시 중지됩니다). 이러한 방식으로 서버 GC 모드는 처리량 (초당 요청 수)을 최대화하고 프로세서 수가 증가함에 따라 성능을 향상시킵니다. 특히 4 개 이상의 프로세서가 장착 된 컴퓨터에서 성능이 향상되었습니다.

하지만 성능이 떨어지는 것은 아닙니다. !!!! 누구 조언있어?

+1

DanC. 이것은 GC 모드에 대해 처음 들었습니다. 관련 MSDN 페이지에 대한 링크를 게시 할 수 있습니까? – spender

+1

어떤 종류의 성능이 기대 되는가? 프로그램 Windows GUI 기반 또는 일부 종류의 웹 서비스입니까? –

+0

요하네스에게 감사드립니다. – spender

답변

15

아주 잘 설명하지는 않지만, 워크 스테이션 모드는 비동기이지만 서버 모드는 코어마다 동기식입니다.

즉, 워크 스테이션 모드는 일관된 성능이 필요한 소수의 장기 실행 응용 프로그램을 대상으로합니다. 가비지 수집은 "방해가되지"려고하지만 결과적으로 평균적으로 효율성은 떨어집니다.

서버 모드는 각 "작업"이 상대적으로 짧고 단일 코어 (편집 : 생각 멀티 스레드 웹 서버)에 의해 처리되는 응용 프로그램을위한 것입니다. 아이디어는 각각의 "직업"이 모든 CPU 성능을 얻고 신속하게 완료되지만 핵심은 요청을 처리하고 메모리를 정리하는 경우가 때때로 있습니다. 따라서이 경우 GC가 평균적으로 더 효율적이지만, 코어가 실행되는 동안에는 사용할 수 없으므로 애플리케이션이 이에 적응할 수 있어야합니다.

스레드가 상대적으로 결합 된 단일 응용 프로그램이 있기 때문에 두 번째보다는 첫 번째 모드에서 예상되는 모델에 더 잘 어울립니다.

하지만 그게 바로 사후 정당화입니다. 시스템의 성능을 측정하십시오 (ammoQ는 GC 성능이 아니라 응용 프로그램의 작동 방식을 잘 알고 있으므로 측정하기 위해 최선을 다합니다).

+2

"서버"는 종종 다른 사람들에게 다른 것을 의미한다고 덧붙일 가치가 있습니다. MS는 "서버"가 "여러 가지 다른 관련없는 작업을 한꺼번에 사용하는 컴퓨터"를 의미한다고 생각하는 반면 "서버"는 "새 비싼 멀티 코어 상자"를 의미 할 수도 있습니다. 그것들은 유효하지만 완전히 직교 한 2 개의 정의입니다. –

+0

내게는 그 전 ..... ..... –

5

.NET 4.5에서는 동시 서버 가비지 수집을 도입했습니다.

http://msdn.microsoft.com/en-us/library/ee787088.aspx

specify <gcServer enabled="true"/> 
specify <gcConcurrent enabled="true"/> (this is the default so can be omitted) 

그리고 새로운 SustainedLowLatencyMode이있다;

.NET Framework 4.5에서 SustainedLowLatency 모드는 워크 스테이션과 서버 GC 모두에서 사용할 수 있습니다. 켜려면 GCSettings를 설정하십시오.LatencyMode 속성을 GCLatencyMode.SustainedLowLatency로 설정합니다.

+0

실제로 백그라운드 GC가 서버와 클라이언트 모두에서 동시 GC를 대체하기 때문에 ** 백그라운드 ** 서버 가비지 콜렉션을 소개합니다. – i3arnon

+0

@ I3arnon 어떤 모드가 더 좋은 배경입니까? 나는 서버 모드로 내 응용 프로그램을 만들었고 큰 발전을 이루었습니다. – MonsterMMORPG

+0

활성화 된 GC 서버는 기본적으로 .net 4.5에있는 배경입니까? – MonsterMMORPG

관련 문제