我正在使用volley
庫執行網絡操作以加速事情。我的問題是Volley是否執行順序或並行添加到隊列中的請求。Volley庫是否按順序處理所有請求
假設我添加了像Req1,Req2,Req3這樣的請求,他們會開始並行運行還是第二次請求會等到第一次完成?
我正在使用volley
庫執行網絡操作以加速事情。我的問題是Volley是否執行順序或並行添加到隊列中的請求。Volley庫是否按順序處理所有請求
假設我添加了像Req1,Req2,Req3這樣的請求,他們會開始並行運行還是第二次請求會等到第一次完成?
凌空維持多個網絡線程。如果一個線程沒有做任何事情,那麼它會在隊列中工作。
要回答你的問題,Req1,Req2和Req3將分別放置在一個工作線程中,並行運行。
Volley還會緩存下載的數據(並根據下載數據的HTTP頭中的過期時間決定是否重新下載),因此如果您的數據不需要再次下載,它將從緩存,比重新下載更快。
這些是Volley被宣稱比適合使用它的情況下比標準網絡操作更快的原因。當然,你可以自己實現,但Google爲你做了很多艱苦的工作。
通常,一個隊列按照它排隊的順序啓動每個操作,除非它是一個優先級隊列。
因此,假設同等優先級(假設排隊隊列是非優先隊列),我們可以得出結論:Req1
將首先得到開始。然後Req2
,然後是Req3
。
但是,我們可以而不是保證各自完成的順序。如果Req1
非常耗時,則請求將按照與Req1
,Req2
,Req3
不同的順序完成。
我們可以保證的是,它們將以Req1
,Req2
,Req3
的順序啓動。
注意:它們並行運行,但不一定會同時運行。並行化存在限制,就像任何網絡隊列一樣,與瀏覽器類似。如果您向單個服務器發出了數百個請求,它將等待啓動其中的一些服務器,以免重載設備網絡堆棧和目標服務器。 –