- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在编写一个中等复杂的 iOS 程序,它需要有多个线程来执行一些较长的操作(解析、连接到网络等)。但是,我对 dispatch_get_global_queue
和 dispatch_queue_create
之间的区别感到困惑。
我应该使用哪一个,您能否简单解释一下它们之间的区别?谢谢。
最佳答案
作为 documentation描述,全局队列适用于并发任务(即,您将异步调度各种任务,如果它们同时运行,您将非常高兴)并且如果您不想遇到创建和销毁自己的理论开销队列。
如果您需要一个串行队列(即您需要一次执行一个已调度的 block ),创建您自己的队列非常有用。这在许多情况下都很有用,例如当每个任务都依赖于前一个任务或协调与来自多个线程的某些共享资源的交互时。
不太常见,但如果您需要使用 barriers,您还需要创建自己的队列与并发队列一起使用。在这种情况下,创建一个并发队列(即带有 DISPATCH_QUEUE_CONCURRENT
选项的 dispatch_queue_create
)并将屏障与该队列一起使用。你不应该在全局队列上使用屏障。
我的总顾问是,如果您需要串行队列(或需要使用屏障),请创建一个队列。如果不这样做,请继续使用全局队列并绕过创建自己的开销。
如果你想要一个并发队列,但又想控制可以同时运行多少个操作,你也可以考虑使用NSOperationQueue
它有一个 maxConcurrentOperationCount
属性。这在进行网络操作并且您不希望向服务器提交太多并发请求时很有用。
关于ios - dispatch_get_global_queue 和 dispatch_queue_create 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10984885/
以下代码: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ for (int i=0
我有这行代码: let queue = dispatch_get_global_queue(DISPATCH_QUEUE_CONCURRENT, 0); 我收到错误 Cannot invoke dis
我有这个简单的异步代码。 class MyClass { func myFunc() { dispatch_async(dispatch_get_global_queue(DI
在选择要在哪个队列上运行 dispatch_async 时,经常会提到 dispatch_get_global_queue。这是一个将任务委托(delegate)给特定线程的特殊后台队列吗?是不是差不
我继承了一个使用以下线程结构的代码库: dispatch_async(dispatch_get_main_queue(), { () -> Void in dispatch_async(dis
这个问题在这里已经有了答案: How do I dispatch_sync, dispatch_async, dispatch_after, etc in Swift 3, Swift 4, and
我刚刚开始在 iOS 上工作,并且一直在浏览 GCD 上的 Apple 引用资料。 dispatch_get_global _queue 返回一个并发队列,可以向其中提交要执行的 block 。 但是
我正在编写一个中等复杂的 iOS 程序,它需要有多个线程来执行一些较长的操作(解析、连接到网络等)。但是,我对 dispatch_get_global_queue 和 dispatch_queue_c
开始学习核心数据和 dispatch_async。有一段代码可以从一组数据中获取图像的 url 并将其设置为核心数据的模型,如下所示 dispatch_async(dispatch_get_globa
苹果的文档说,dispatch_get_global_queue()是并发队列,dispatch_sync是串行的意思,那么任务是异步处理还是同步处理? 最佳答案 您对什么是队列以及异步与同步的含义感
虽然使用 GCD 为后台线程创建的普通队列需要 dispatch_release 来释放对象的内存,但获取全局队列是否也需要做同样的事情,因为释放全局队列可能会导致操作系统出现问题我问:持有对由 di
我有一个表格 View ,其中我显示了 3 个单元格,并且取决于像分页一样工作的 Collection View 单元格。所以当我想从 dispatch_async(dispatch_get_glob
我有以下使用 block 获取联系人的代码片段: if (&ABAddressBookCreateWithOptions != NULL) { CFErrorRef error
let downloadGroup = dispatch_group_create() var images = [UIImage]() var errors = [NSError](
// Method called when a button is clicked - (void)handleClickEvent { dispatch_sync(dispatch_ge
我是一名优秀的程序员,十分优秀!