首页 > 解决方案 > 了解调度队列线程

问题描述

我正在从事一个从数据库中收集(1000+)数据点并每隔几秒钟更新一次的项目。为了防止我的主线程被锁定,我必须在后台线程中读取、排序和保存数据。我想了解两个后台调用之间的区别。

本文中,作者为我们提供了一个使用后台线程的好例子,如下所示:DispatchQueue(label: "foo", qos: .utility).async {}

在这个网站的另一个例子中,我发现了一个很好的扩展DispatchQueue. 这个不使用标签。

我知道这两种方法是不同的,但究竟如何(除了一种是扩展)?第二个问题:在再次调用之前等待后台线程活动完成其工作是最佳做法吗?或者那有关系吗?

标签: iosswiftgrand-central-dispatch

解决方案


您自己创建的调度队列(第一个示例)和内置global调度队列(第二个示例)的行为之间的唯一表面区别是前者是串行的(默认情况下),而后者是并发的。

第二个问题:等待是最佳实践吗

“等待”永远是不对的。如果您有多个任务要协调,您可以使用 GCD 来完成(例如调度组)。


推荐阅读