Swift URLSession.shared.downloadTask是否创建多线程下载会话?

Swift URLSession.shared.downloadTask是否创建多线程下载会话?,swift,networking,urlsession,Swift,Networking,Urlsession,标题中说的所有内容都是URLSession下载任务单线程或多线程(如IDM和其他下载管理器应用程序)?两者都是。URLSession可以在单独的线程中创建并行任务,在单个线程中创建HTTP或HTTP/2上的流水线任务,或者创建完全脱离进程的请求(因此,尽管存在另一个“线程”,这是因为它位于完全不同的进程中)。它的实际功能取决于您发出的请求、您对这些请求的选项以及服务器支持的功能。谢谢,有没有办法观察每个线程URLSession创建的过程?如果不在其上粘贴调试器并遵循程序集,它就不会创建线程(如果

标题中说的所有内容都是
URLSession
下载任务单线程或多线程(如IDM和其他下载管理器应用程序)?

两者都是。URLSession可以在单独的线程中创建并行任务,在单个线程中创建HTTP或HTTP/2上的流水线任务,或者创建完全脱离进程的请求(因此,尽管存在另一个“线程”,这是因为它位于完全不同的进程中)。它的实际功能取决于您发出的请求、您对这些请求的选项以及服务器支持的功能。

谢谢,有没有办法观察每个线程
URLSession
创建的过程?如果不在其上粘贴调试器并遵循程序集,它就不会创建线程(如果您想这样做,我推荐Hopper作为价格合理的反汇编程序和调试器)。您通常可以在Xcode或Instruments中的堆栈跟踪中看到它们。请记住,URLSession的一部分是用GCD处理的,队列和源与线程的比例不是1:1。不要假设有特定的线程处理特定的请求。多年来它也发生了很大的变化(进程外相对较新)。非常感谢,但我指的是应用程序本身的代码方式,而不是调试,比如委托、闭包或可观察字段。绝对不是。URLSession如何管理自己的线程、队列、源和连接是内部实现细节。探索很有意思,但你永远不会依赖它们。我使用了reverse en对URL加载系统进行工程设计,以探索性能改进(特别是它愿意同时建立多少个连接;在我探索的时候,我相信是6个),但我无法想象在“正常”代码中你会想使用什么。非常感谢,帮了我很多忙