문제

낮은 수준의 HTTP 및 FTP 전송을 구현할 때 최대 처리량을 위해 버퍼 크기(소켓에서 읽거나 쓰는 바이트)를 어떻게 선택합니까?내 애플리케이션은 130Kbps에서 3Mbps까지 다양한 연결에서 HTTP 또는 FTP를 통해 데이터를 전송해야 합니다(예상 속도는 미리 알고 있습니다).때로는 단방향으로 이동하기도 하고, 때로는 양방향으로 이동하기도 합니다.평균 버퍼 크기를 고수해야 합니까, 아니면 연결 속도에 따라 변경해야 합니까?

감사해요.

도움이 되었습니까?

해결책

먼저 측정 값을 얻으십시오.

그런 다음 신뢰할 수있는 성능 측정 후에 버퍼 크기를 변경하고 속도 대 버퍼 크기의 그래프를 플로팅하십시오.

연결 속도를 미리 알고 있으므로 실제 버퍼 크기가 다르면 실제 속도를 측정 할 수 있어야합니다.

OS, 프로토콜 스택 및 네트워크는 너무 복잡하여 첫 번째 원칙에서 답을 얻을 수 없습니다. 무엇이든하기 전에 측정해야합니다.

다른 팁

8KB 이상의 버퍼 크기를 선택하십시오. 9000은 일반적으로 가장 빠른 네트워크에서도 사용되는 가장 큰 MTU (최대 전송 장치) 크기입니다.

연결의 MTU보다 큰 버퍼를 사용하면 운영 체제가 필요에 따라 MTU 크기의 조각으로 분류하므로 MTU를 통해 사용하는 것은 네트워크 성능에 거의 영향을 미치지 않습니다.

그러나 큰 버퍼를 사용하면 성능에 다른 영향을 미칠 수 있습니다. 파일을 전송하는 경우 큰 버퍼를 사용하면 읽기 성능이 증가하여 응용 프로그램 속도가 향상 될 수 있습니다.

따라서 일반적으로 16KB와 같은 멋진 라운드 번호를 선택하는 것은 좋은 생각입니다. 네트워크 성능에 부정적인 영향을 줄 수 있으므로 1500 미만으로 가지 않아도됩니다 (운영 체제가 때때로 작은 패킷을 보내서 네트워크의 성능을 감소시킵니다).

버퍼 크기를 얻을 수 있습니다.httpSocket.getReceiveBufferSize();읽는 과정에서 이 버퍼를 RAM에 쓰는 것이 좋습니다.예를 들어:ByteArrayOutputStream 메모리 파일.버퍼를 채운 후에만 디스크에 씁니다.

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