2016-08-13 119 views
0

當我們創建多個連接/請求時實際發生了什麼?與順序請求相比,它的速度如何?我有這個問題,因爲在並行請求不是共享帶寬的情況下,響應時間長。多個並行Http請求的優點

在我的情況下,我們使用volley庫在不同的線程上發出多個請求,但它是如何有用的。

有人可以解釋如何和爲什麼並行請求是首選。

回答

2

所以說你站在一個棒球場和三個朋友的田野。

你想把球扔給你的每個朋友,所以你把球扔給你的第一個朋友。他把它扔回去。然後你把球扔給你的第二個朋友,他把球扔回去,然後你的第三個朋友,等等。

現在我們假設你站在一個場地三個棒球和你的三個朋友。

你向你的第一個朋友扔了一個球。現在這個球在空中,所以你拿起另一個球並把它扔給你的第二個朋友。雖然球在空中,你把最後一個扔給你的第三個朋友。

很容易看出,通過在空氣中同時放置多個球,整個過程將花費很少的時間。同樣的原則適用於HTTP請求。很明顯,如你所述,你必須能夠有多個連接和多個線程;然而,當你能做到這一點時,你會在更短的時間內完成相同數量的工作。

+0

感謝您的答案。它很簡單,但清晰 – chaco

3

我能想到的至少有三個原因:延遲,數據包丟失和流量整形。

  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通常使用擁塞控制技術來避免造成過多的數據包丟失。當操作系統檢測到數據包丟失時,它會暫停數據包的輸出流,然後再次緩慢開始發送數據包(包括重新傳輸丟棄的數據包),速度越來越快,直到數據包丟失,然後再次退出,等等。 。

    因爲這個退避過程對於每個打開的TCP套接字都是獨立發生的,所以如果你有多個同時打開的套接字,那麼在一個套接字上丟失的封包將不會影響其他套接字。因此,請求不會因其他請求期間發生的數據包丟失而被任意延遲。

  3. 流量調整:通常,互聯網服務提供商通過調整流量來優先考慮交互式流量而不是下載。這導致每個網絡連接起初速度非常快,然後在一段時間後或在傳輸一定數量的數據後減慢爬行速度。

    通過在多個連接上並行執行多個請求,您可以同時而不是連續地執行該時間懲罰。

所有這一切的結果是,人們嘗試設計的網絡協議,以儘量減少往返次數,儘量同時保持飛行多個請求,並儘量減少請求之間的依賴關係(發送請求B和C基於來自請求A)的響應)儘可能多。例如,當您編寫Web瀏覽器時,只要您獲得HTML的部分解析就足以告訴您需要加載給定圖像或CSS文件,就會開始提取圖像和CSS 。您越早開始這些相關請求中的每一個,就可以將頁面作爲整體加載並呈現它所花費的時間就越少。