2016-08-13 4 views
0

우리가 여러 개의 연결/요청을 만들 때 실제로 어떻게됩니까? 순차적 요청과 비교할 때 얼마나 빠른가요?이 질문은 병렬 요청이없는 경우 대역폭이 공유 요청을 발생 시키므로 발생합니다. 긴 응답 시간.여러 병렬 HTTP 요청의 장점

내 경우에는 발리 라이브러리를 사용하여 여러 스레드에서 여러 요청을하지만 어떻게 유용합니까?

병렬 요청이 선호되는 방법과 이유를 설명 할 수있는 사람이 있습니까?

답변

2

야구와 3 명의 친구가있는 필드에 서 있다고 해봅시다.

공을 각 친구에게 던져서 공을 첫 번째 친구에게 던지려고합니다. 그는 그것을 다시 던졌습니다. 그런 다음 두 번째 친구에게 공을 던져 다시 던졌습니다. 세 번째 친구 등

세 개의 야구와 3 명의 친구가있는 필드에 서 있다고 가정 해 보겠습니다.

첫 번째 친구에게 공 하나를 던집니다. 이제 공이 공중에 있으므로 다른 공을 들고 두 번째 친구에게 던집니다. 공이 공중에있는 동안, 당신은 당신의 세번째 친구에게 마지막 것을 던집니다.

공기 중에 여러 개의 볼을 동시에 사용하면 전체 과정을 훨씬 빠르게 처리 할 수 ​​있습니다. 동일한 원칙이 HTTP 요청에 적용됩니다. 분명히 명시한 바와 같이 다중 연결과 다중 스레드를 가질 수 있어야합니다. 그러나 그렇게 할 수 있으면 더 짧은 시간에 같은 양의 작업을 할 수 있습니다.

+0

대답 주셔서 감사합니다. 간단하지만 명확합니다. – chaco

3

지연, 패킷 손실 및 트래픽 쉐이핑과 같은 3 가지 이유가 있습니다.

  1. 대기 시간 : 느린 지연 - 더는 서버로 왕복을 만들 수있는 요청에 걸리는 시간의 양을 여러 네트워크 연결 (특히 휴대 전화 연결을) 만드는 것의 많은. 다섯 개의 요청을 보내고 각 요청은 서버에 도달하고 응답이 다시 오기위한 요청에 대해 1 초가 걸린다고 가정하십시오. 다섯 가지 요청을 모두 순차적으로 전송하는 경우 :

    0 1 2 3 4 5 
    RQ1 RQ2 RQ3 RQ4 RQ5| 
    

    다음에 5 초가 소요됩니다. 대신에 바로 다음에 하나를 보냈다고 가정 해보십시오.

    0 1 2 3 4 5 
    RQ1 | 
        RQ2 | 
        RQ3 | 
        RQ4 | 
        RQ5| 
    

    이전 요청이 아직 전송 중일 때 장치가 다음 요청을 전송할 수 있기 때문에 시간이 훨씬 적게 걸립니다.

  2. 패킷 손실 : 또 다른 느린 원인 (특히 셀룰러 및 Wi-Fi 네트워크의 경우)은 패킷 손실입니다. TCP는 일반적으로 혼잡 제어 기술을 사용하여 네트워크 링크 (두 라우터 사이의 와이어)가 포화 상태 (용량)에있을 때 과도한 패킷 손실을 방지합니다. OS가 패킷 손실을 감지하면 나가는 패킷 스트림을 일시 중지 한 다음 천천히 패킷 전송을 다시 시작하고 (손실 된 패킷 재전송 포함), 패킷이 손실 될 때까지 더 빠르고 빨라지고 다시 꺼지는 등의 작업을 수행합니다. .

    열려있는 TCP 소켓마다이 백 오프 프로세스가 독립적으로 발생하기 때문에 여러 개의 동시 소켓이 열려 있으면 한 소켓의 손실 된 패킷이 다른 소켓에 영향을 미치지 않습니다.따라서 요청은 다른 요청 중에 발생하는 패킷 손실로 인해 임의로 지연되지 않습니다.

  3. 트래픽 셰이핑 : 종종 ISP는 다운로드 트래픽보다 대화 형 트래픽 우선 순위를 지정하기 위해 트래픽을 형성합니다. 이로 인해 각 네트워크 연결이 처음에는 매우 빠르다가 일정 시간 후 또는 특정 양의 데이터가 전송 된 후에 크롤링 속도가 느려집니다.

    여러 연결에서 여러 요청을 병렬로 처리하면 연속적으로 처리하는 대신 동일한 시간에 페널티를 가져옵니다.

이 모든 것의 결말은 사람들이 동시에 비행 여러 요청을 유지하려고하고, 요청 B와 C를 보내는 요청 사이의 종속성을 (최소화하기 위해 왕복의 수를 최소화하는 네트워크 프로토콜을 설계하려고한다는 것입니다

요청 A의 응답을 기반으로).

예를 들어 웹 브라우저를 작성할 때 주어진 이미지 나 CSS 파일을로드해야한다고 알려주는 HTML 구문을 부분적으로 파지하자마자 이미지와 CSS를 가져 오기 시작합니다 . 이러한 종속 요청을 더 빨리 시작할수록 페이지 전체를로드하고 렌더링하는 데 걸리는 시간이 줄어 듭니다.