2010-05-08 2 views
4

C#에서 비동기 서버 소켓으로 작업하는 경우 소켓에 넣을 적절한 백 로그는 무엇입니까? 예 :비동기 서버 소켓의 적절한 백 로그는 무엇입니까?

server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
IPEndPoint iep = new IPEndPoint(IPAddress.Any, port); 
server.Bind(iep); 
server.Listen(10); 
+1

나는 항상 '5'를 사용하는 경향이 있지만, 왜 '왜'에 대한 설명이 뚜렷한가 - 모든 듣기 소켓, 비동기 또는 사용하지 않는 단지 기본값이다. –

답변

3

대부분의 응용 프로그램에서 리스너 자체가 병목 현상이 아닌 것 같습니다. 종종 일종의 작업을 수행하여 이러한 TCP 요청에 응답해야하며 응용 프로그램이 한 번에 효과적으로 사용할 수있는 작업자의 양은 이론적으로 유지할 수있는 연결 수보다 작습니다. 난 항상 5을 사용하는 경향이

,하지만 난 더 크게 이유에 대한 설명을 추론하지 않은 :

아마 코멘트에 알렉스 마르 텔리의 "엄지 손가락의 규칙"을 설명합니다.

쿼드 코어 서버의 경우 클라이언트가 CPU를 많이 사용하는 작업을 시작하는 경우 의미가 있습니다. 4 개의 작업자/스레드/코어를위한 4 개의 연결, 그리고 과중한 부하 일 때 서비스의 응답 성을 유지하는 하나의 연결.

그러나 작업량이 CPU를 많이 사용하지 않는 경우 위의 제한/설명이 관련성이 없으므로 10 또는 50 개의 연결을 관리 할 수 ​​있거나 컴퓨터 전용 리소스를 사용해야 만 허용 할 수 있습니다 하나. 기본적으로 Hans에 동의합니다. 단호하고 빠른 "정답"이 필요합니다. 응용 프로그램의 기능을 살펴보고 실제로 처리 할 수 ​​있다고 생각되는 연결 수를 예측하고이를 조정할 필요가 있습니다. 테스트로 최대 효율.

관련 문제