ios - 多次调用 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
将要做的事情排入队列?
解决方案
提交到调度队列的工作在系统管理的线程池上执行。除了代表应用程序主线程的调度队列外,系统不保证它使用哪个线程来执行任务。
当并发调度队列调度的任务阻塞线程时,系统会创建额外的线程来运行其他排队的并发任务。
系统可以使用现有线程之一,也可以创建一个新线程。不能保证在同一个调度队列上执行的两个工作项将在同一个线程上执行(除非它是主队列)。
推荐阅读
- java - Android 11 使用相机拍摄图像
- php - 警告:mysqli::__construct(): (HY000/2002): 在第 10 行的 C:\Bitnami\wampstack-7.2.33-0\apache2\htdocs\bboard\db.php
- apache-superset - Apache Superset 仪表板中的 URL 过滤器参数
- mongodb - 如何使用 mongodb 在 typegraphql 中存储引用的子文档?
- python - 如何修复由于 Pandas Groupby 中的级别导致的索引错误
- c++ - Visual Studio 没有为静态库构建创建 .lib 文件
- directadmin - Directadmin 错误名称服务器配置
- matlab - 如何用 NaN 填充两个向量之间的差异以使长度相等?
- amazon-web-services - 如何在 aws s3 存储桶和云端执行从非 www 到 www 的 301 重定向
- paypal - PayPal Live Webhooks 在没有任何更改的情况下突然停止访问我们的网络服务器