首页 > 解决方案 > 多次调用 DispatchQueue.global(qos: .background).async 会创建多个线程吗?

问题描述

我对 Swift for iOS 编程比较陌生。我想知道我是否这样做:

for n in 1...10 {
    DispatchQueue.global(qos: .background).async {
        sleep(5)
        print("Hello world!")
    }
}

这会产生10更多的后台线程,这些线程会立即开始处理我的任务吗?

还是只会有1后台线程,而我只是10将要做的事情排入队列?

标签: iosswift

解决方案


来自DispatchQueue 文档

提交到调度队列的工作在系统管理的线程池上执行。除了代表应用程序主线程的调度队列外,系统不保证它使用哪个线程来执行任务。

当并发调度队列调度的任务阻塞线程时,系统会创建额外的线程来运行其他排队的并发任务。

系统可以使用现有线程之一,也可以创建一个新线程。不能保证在同一个调度队列上执行的两个工作项将在同一个线程上执行(除非它是主队列)。


推荐阅读