接上篇:http://www.reibang.com/p/8d0875757205
NSURLSession和NSURLSessionConfiguration到底是什么關系
之前的錯誤理解點
- NSURLSession是會話通道,每一個會話通道都可以使用單獨默認配置,并且默認支持iOS 4個TCP鏈接,OSX 6個tcp連接
- 每一個NSURLSession都單獨對應一個NSURLSessionConfiguration對象的配置,只對NSURLSessionConfiguration這個配置自己負責
- 創(chuàng)建多個Session可以增加我們的task并發(fā),加快多并發(fā)的網(wǎng)絡交互時間
但是經(jīng)過我的多次嘗試,發(fā)現(xiàn)我上述概念是錯誤的,我這邊是理解錯的了
探索理解記錄(在下面的demo中):
- 因為之前的Demo中是For循環(huán)創(chuàng)建task,時間太短,個人猜疑會不會因為iOS總的線程總數(shù)超限制,造成了適應2個不同的session的時候,另外一個session雖然初始化完成,但是被第一個初始化的session把資源搶干凈了
- 將代碼中的for循環(huán)創(chuàng)建task,改成timer每隔1秒去創(chuàng)建一個task,并且2個session混合循環(huán)創(chuàng)建task,查看task的創(chuàng)建記錄
總的經(jīng)過嘗試,正確的匯總:
- NSURLSessionConfiguration無論使用哪一種配置,HTTPMaximumConnectionsPerHost賦予的值是所有類型:
A. defaultSessionConfiguration,
B. ephemeralSessionConfiguration,
C. backgroundSessionConfiguration
的可以同時并發(fā)的task的總的數(shù)量 - NSURLSessionConfiguration如果使用系統(tǒng)提供的那三種類型,無論創(chuàng)建多少個NSURLSession,session之間共用的都是一個
NSURLSessionConfiguration(最大并發(fā)的配置,感謝庚鑫
提出的疑問,),也就是基本可以將NSURLSessionConfiguration理解為單個配置對象,但是單個配置對象都是共用 最大并發(fā)數(shù),然后大家共用這個最大并發(fā)數(shù),也就是大家操作的最后一次的配置為所有session使用的最終的配置
上述描述如果有同學感覺有疑問,可以提出疑問,這個是我測試的時候聯(lián)想的猜想,如果有不同的意見,懇請?zhí)岢?我也學習,互相學習,謝謝
這樣就解決了我們的之前的上部分的最后匯總的疑惑,但是除此之外,還有一個疑惑,那
對于我們在高并發(fā)的請求,期望快速做出反應的時候,除了設置HTTPMaximumConnectionsPerHost的值為一個我們能夠接受的比較大的值外,創(chuàng)建2個甚至多個NSURLSession是否還有什么意義呢? 這個通過查詢文檔,終于找到了合理解釋:
可以參看官方文檔的URL Loading System的官方介紹,下面才是期望的真正目的;
官網(wǎng)URL Loading System模塊介紹
創(chuàng)建多個Session的目的,不是為了增加并發(fā),而是為了對不同的Task使用不同的策略,來實現(xiàn)更符合我們需求的交互
希望我的整理能對大家對NSURLSession的理解有些益處,如果有不同意見的同學可以下面評論,互相交流,謝謝,