2014-10-15 1 views
1

RAM과 CPU의 계산 리소스를 고려하지 않고 소켓이 처리 할 수있는 최대 동시 연결 수를 계산하려고합니다. 물론, 나는 그것을 go하고 SO를 확인하고 비슷한 질문을 찾았지만, 나는 답이 없다는 것에 만족하지 않는다. 그래서 매우 구체적으로하려고합니다 :컴퓨터 리소스를 고려하지 않고 소켓에서 처리 할 수있는 최대 동시 연결 수는 얼마입니까?

멀티 스레드 http 프록시의 컨텍스트와 관련된 다음 코드를 가정합니다. 여기서 serverSocket은 ServerSocket 인스턴스이고 ProxyThread는 스레드에서 확장됩니다.

while (listening) { 
    new ProxyThread(serverSocket.accept(),prop).start(); 
} 

질문 : 우리는 동시에 "수락"을 처리 할 수 ​​있습니까? (들어오는 연결 수를 병렬로 몇 개 설정하고 처리 할 수 ​​있습니까?).

나는 모든 것이 자원에 의해 제한된다는 것을 알고 있지만, 전산 자원 외에 거기에 의존하지 않는 다른 한계가 있는지 알고 싶다. 즉, 더 많은 CPU를 추가하더라도 더 이상 RAM이 깨지지 않는 한도가 존재하면 감사합니다.

+0

인터넷 검색에서 C10K 문제가 발생 했습니까? –

+0

감사합니다. 예, 저는 이미 C10K 문제, 특히이 질문을 매우 유용하다고 확인했습니다 : http://stackoverflow.com/questions/17593699/tcp-ip-solving-the-c10k-with-the-thread- 클라이언트 당 접근법. 나는 당신의 대답에 동의합니다. 한계는 OS가 처리 할 수있는 동시 스레드의 수입니다. 다시 한번 감사드립니다. – ipinyol

답변

0

소프트웨어/하드웨어 제한은 항상 리소스 제한에 도달합니다. 특히 확장성에 대해 논의 할 때는이를 무시할 수 없습니다.

OS와 OS에 대한 자바 핸드 스레딩 및 네트워킹은 리소스 제한을 중심으로 설계되었습니다. 그래서 정말 얼마나 많은 연결과 쓰레드가 OS를 지원할 수 있는지 묻습니다. 그리고 대답은 운영 체제에 따라 다릅니다.

C10K limit은 잘 알려진 한계이지만 실제로는 100, 1k, 5k 및 10k 연결을 최대로 활용하는 시스템 (응용 프로그램 및 OS 아키텍처에 따라 다름)을 발견했습니다. OS가 비활성 연결을 폴링하지 않고 연결 당 스레드를 생성하지 않으면 10k를 초과 할 수 있습니다.

관련 문제