ios - NSURLSession 和多线程用于下载多个文件
问题描述
我在 iOS 上有一个想要从我的服务器下载数据的应用程序。数据不过是简单的文本文件。我想并行下载这些文件。如果我应该在一个 nsurlsession 下创建多个 nsurlsession 实例或多个任务(NSURLSessionTasks),我会感到困惑。
我知道 nsurlsession API 是线程安全的。我在这里的基本困惑是关于以下事情:
我的 NsurlsessionConfiguration 将始终保持不变。所以,理想情况下,我可以为每个文件使用相同的 NSURLSession 实例。但是并行创建多个 NSURLSessionTasks 实例有意义吗?或者更好的方法是创建一个新的 NSURLSession 来实现并行性。
我很困惑地理解同一个 NSURLSession 中的每个 NSURLSessionTask 是创建一个新的端点还是被序列化。
解决方案
一个包含许多任务的会话——每个请求一个——将同时安全地工作。只要并发性小于HTTPMaximumConnectionsPerHost
会话配置的一部分,客户端是跨多个服务器还是向单个服务器发出请求都没有区别。
任务并行运行。(实际上很难在文档中找到这些词明确出现的地方,但这里有很好的暗示)。
请注意,会话配置具有delegateQueue
. 基本原理是——因为会话任务是同时运行的——应用程序级别需要序列化处理结果,以免两个并行任务通过委托相互影响。
推荐阅读
- java - 在 Spring Boot 应用程序中使用多个 MongoDB 数据库
- c# - 将阿拉伯语句子拆分为字母并保留变音符号
- html - CSS技巧在多列中显示多个带有LI元素的UL列表,具体取决于网页宽度
- neo4j - neo4j 中的 WHERE 条件 | 按关系属性过滤
- python - 属性和数据类属性的 getter 函数
- google-apps-script - 如何/在哪里报告滥用 Google 服务的行为
- reactjs - 前端/React.js 的错误日志记录 - 可以/应该完成吗?是否有意义?有什么好处?
- python - ThreadPoolExecutor 和利用网络的子进程之间的竞争条件
- django - Azure 应用服务 SSH 连接被拒绝。不使用 Docker。Django没有从要求安装
- flutter - 有 Flutter Web 替代 cached_network_image 吗?