接上篇:https://www.jianshu.com/p/8d0875757205
NSURLSession和NSURLSessionConfiguration到底是什么关系
之前的错误理解点
- NSURLSession是会话通道,每一个会话通道都可以使用单独默认配置,并且默认支持iOS 4个TCP链接,OSX 6个tcp连接
- 每一个NSURLSession都单独对应一个NSURLSessionConfiguration对象的配置,只对NSURLSessionConfiguration这个配置自己负责
- 创建多个Session可以增加我们的task并发,加快多并发的网络交互时间
但是经过我的多次尝试,发现我上述概念是错误的,我这边是理解错的了
探索理解记录(在下面的demo中):
- 因为之前的Demo中是For循环创建task,时间太短,个人猜疑会不会因为iOS总的线程总数超限制,造成了适应2个不同的session的时候,另外一个session虽然初始化完成,但是被第一个初始化的session把资源抢干净了
- 将代码中的for循环创建task,改成timer每隔1秒去创建一个task,并且2个session混合循环创建task,查看task的创建记录
总的经过尝试,正确的汇总:
- NSURLSessionConfiguration无论使用哪一种配置,HTTPMaximumConnectionsPerHost赋予的值是所有类型:
A. defaultSessionConfiguration,
B. ephemeralSessionConfiguration,
C. backgroundSessionConfiguration
的可以同时并发的task的总的数量 - NSURLSessionConfiguration如果使用系统提供的那三种类型,无论创建多少个NSURLSession,session之间共用的都是一个
NSURLSessionConfiguration(最大并发的配置,感谢庚鑫
提出的疑问,),也就是基本可以将NSURLSessionConfiguration理解为单个配置对象,但是单个配置对象都是共用 最大并发数,然后大家共用这个最大并发数,也就是大家操作的最后一次的配置为所有session使用的最终的配置
上述描述如果有同学感觉有疑问,可以提出疑问,这个是我测试的时候联想的猜想,如果有不同的意见,恳请提出,我也学习,互相学习,谢谢
这样就解决了我们的之前的上部分的最后汇总的疑惑,但是除此之外,还有一个疑惑,那
对于我们在高并发的请求,期望快速做出反应的时候,除了设置HTTPMaximumConnectionsPerHost的值为一个我们能够接受的比较大的值外,创建2个甚至多个NSURLSession是否还有什么意义呢? 这个通过查询文档,终于找到了合理解释:
可以参看官方文档的URL Loading System的官方介绍,下面才是期望的真正目的;
创建多个Session的目的,不是为了增加并发,而是为了对不同的Task使用不同的策略,来实现更符合我们需求的交互
希望我的整理能对大家对NSURLSession的理解有些益处,如果有不同意见的同学可以下面评论,互相交流,谢谢,
网友评论