URLSession 对象是资源密集型的吗?
Posted
技术标签:
【中文标题】URLSession 对象是资源密集型的吗?【英文标题】:Are URLSession objects resource intensive? 【发布时间】:2019-08-24 02:44:26 【问题描述】:为每个网络请求创建一个新的 URLSession 会占用大量资源吗?
一些背景:
我正在开发一个用于发出网络请求的库。我正在尝试添加一项功能,该功能允许将结果下载到也报告其进度的文件中。为此,我将不得不成为会议的代表。
这没什么大不了的,除非公共接口允许自定义用于请求的 URLSession。我不想覆盖开发人员想要对其自己的委托进行的任何自定义。
现在,我认为这样做的方法是偷偷复制他们认为正在使用的会话(是的,我要做的不仅仅是复制对象本身),然后是我的内部委托会调用原始公共会话的方法。如果他们在请求期间尝试操纵会话,仍然可能会出现混乱/问题,但这似乎是一个小得多的边缘情况。
我现在唯一担心的是,如果发出许多请求,这可能会占用大量资源。有没有人对此有感觉?
【问题讨论】:
【参考方案1】:是的,它们很密集。这是来自Apple Staff on the developer forums 的引用。
这是一种常见的反模式,我们专门针对 在今年的 WWDC 上发出警告。根据请求创建会话 在 CPU 上效率低下,更重要的是在网络上。 具体来说,它可以防止连接重用,这会从根本上减慢 背靠背的请求。这对 HTTP/2 尤其不利。我们 鼓励人们在一个会话中将所有类似的任务分组,使用 仅当您有不同的任务集时才进行多个会话 不同的要求(如交互式任务与背景 下载任务)。这意味着许多简单的应用程序可以逃脱 使用单个静态分配的会话。
【讨论】:
以上是关于URLSession 对象是资源密集型的吗?的主要内容,如果未能解决你的问题,请参考以下文章
从图像 url 下载图像方面,URLSession 与 GCD 有啥区别?
使用 Swift URLSession 将标头传递给 URL