我正在编写一个中等复杂的iOS程序,它需要有多个线程来执行一些较长的操作(解析、网络连接等等).然而,我对dispatch_get_global_queue
和dispatch_queue_create
之间的区别感到困惑.
我应该使用哪一种?你能简单解释一下两者的区别吗?谢谢
我正在编写一个中等复杂的iOS程序,它需要有多个线程来执行一些较长的操作(解析、网络连接等等).然而,我对dispatch_get_global_queue
和dispatch_queue_create
之间的区别感到困惑.
我应该使用哪一种?你能简单解释一下两者的区别吗?谢谢
正如documentation所描述的,如果不想遇到创建和销毁自己的队列的理论开销,全局队列适合并发任务(即,您将异步调度各种任务,如果它们同时运行,您会非常满意).
如果需要串行队列(即需要一次执行一个已调度的块),那么创建自己的队列非常有用.这在许多情况下都很有用,例如当每个任务依赖于前一个任务时,或者当协调与来自多个线程的共享资源的交互时.
不太常见,但如果需要将barriers与并发队列结合使用,还需要创建自己的队列.在这种情况下,创建一个并发队列(即dispatch_queue_create
和DISPATCH_QUEUE_CONCURRENT
选项),并将屏障与该队列结合使用.你不应该在全球排队时使用障碍物.
我的总建议是,如果你需要一个串行队列(或者需要使用屏障),那么就创建一个队列.如果没有,请继续使用全局队列,绕过创建自己队列的开销.
如果你想要一个并发队列,但是想要控制多个操作可以同时运行,你也可以考虑使用具有NSOperationQueue
属性的maxConcurrentOperationCount
.这在执行网络操作时非常有用,而且您不希望向服务器提交太多并发请求.