gpt4 book ai didi

ios - dispatch_get_global_queue 和 dispatch_queue_create 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 11:41:25 25 4
gpt4 key购买 nike

我正在编写一个中等复杂的 iOS 程序,它需要有多个线程来执行一些较长的操作(解析、连接到网络等)。但是,我对 dispatch_get_global_queuedispatch_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com