iOS原生級別后台下載詳解


最大並發數

URLSessionConfiguration里有個httpMaximumConnectionsPerHost的屬性,它的作用是控制同一個host同時連接的數量,蘋果的文檔顯示,默認在macOS里是6,在iOS里是4。單從字面上來看它的效果應該是:如果設置為N,則同一個host最多有N個任務並發下載,其他任務在等待,而不同host的任務不受這個值影響。但是實際上又有很多需要注意的地方。

  • 沒有資料顯示它的最大值是多少,經測試,設置為1000000都沒有問題,但是如果設置為Int.Max,則會出問題,對於大多數URL都是無法下載(應該跟目標url的服務器有關);如果設置為小於1,對於大多數URL都無法下載
  • 當使用URLSessionConfiguration.default來創建一個URLSession時,無論在真機還是模擬器上
    • httpMaximumConnectionsPerHost設置為10000,無論是否同一個host,都可以有多個任務(測試過180多個)並發下載
    • httpMaximumConnectionsPerHost設置為1,對於同一個host只能同時有一個任務在下載,不同host可以有多個任務並發下載
  • 當使用URLSessionConfiguration.background(withIdentifier:)來創建一個支持后台下載的URLSession
    • 在模擬器上
      • httpMaximumConnectionsPerHost設置為10000,無論是否同一個host,都可以有多個任務(測試過180多個)並發下載
      • httpMaximumConnectionsPerHost設置為1,對於同一個host只能同時有一個任務在下載,不同host可以有多個任務並發下載
    • 在真機上
      • httpMaximumConnectionsPerHost設置為10000,無論是否同一個host,並發下載的任務數都有限制(目前最大是6)
      • httpMaximumConnectionsPerHost設置為1,對於同一個host只能同時有一個任務在下載,不同host並發下載的任務數有限制(目前最大是6)
      • 即使使用多個URLSession開啟下載,可以並發下載的任務數量也不會增加
      • 以下是部分系統並發數的限制
        • iOS 9 iPhone SE上是3
        • iOS 10.3.3 iPhone 5上是3
        • iOS 11.2.5 iPhone 7Plus上是6
        • iOS 12.1.2 iPhone 6s上是6
        • iOS 12.2 iPhone XS Max上是6

從以上幾點可以得出結論,由於支持后台下載的URLSession的特性,系統會限制並發任務的數量,以減少性能的開銷。同時對於不同的host,就算httpMaximumConnectionsPerHost設置為1,也會有多個任務並發下載,所以不能使用httpMaximumConnectionsPerHost來控制下載任務的並發數。Tiercel 2是通過判斷正在下載的任務數從而進行並發的控制。

 

http://www.cocoachina.com/articles/27216


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM