美文网首页iOS开发之常用技术点
(下部分)NSURLSession的最大并发 HTTPMaxim

(下部分)NSURLSession的最大并发 HTTPMaxim

作者: 空空小僧 | 来源:发表于2018-12-22 20:19 被阅读89次

    接上篇: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的官方介绍,下面才是期望的真正目的;

    官网URL Loading System模块介绍

    创建多个Session的目的,不是为了增加并发,而是为了对不同的Task使用不同的策略,来实现更符合我们需求的交互

    希望我的整理能对大家对NSURLSession的理解有些益处,如果有不同意见的同学可以下面评论,互相交流,谢谢,

    Demo测试地址: https://github.com/yangfangkuo/downLoadTest

    相关文章

      网友评论

        本文标题:(下部分)NSURLSession的最大并发 HTTPMaxim

        本文链接:https://www.haomeiwen.com/subject/pzlwkqtx.html