2012-06-26 65 views
3

我想了解队列类型之间的差异。 据我了解有3种类型:GCD队列类型

  • 全球队列 - 并行 - 因为他们提交
  • 私人块被执行 - 串行 - 块尽快不管为了
  • 主队列执行队列 - 串行

我想知道的是: 当提交给每种队列时,dispatch_sync和dispatch_async之间有什么区别? 这是我的理解它迄今:

dispatch_sync(global_queue)^ 
{ 
    // blocks are executed one after the other in no particular order 
    // example: block 3 executes. when it finishes block 7 executes. 
} 

dispatch_async(global_queue)^ 
{ 
    // blocks are executed concurrently in no particular order 
    // example: blocks 2,4,5,7 execute at the same time. 
} 

dispatch_sync(main_queue)^ 
{ 
    // blocks are executed one after the other in the order they were submitted 
    // example: block 1 executes. when it finishes block 2 will execute and so forth. 
} 

dispatch_async(main_queue)^ 
{ 
    // blocks are executed concurrently in the order they were submitted 
    // example: blocks 1-4 (or whatever amount of threads the system can handle at one time) will fire at the same time. 
    // when the first block completes block 5 will then execute. 
} 

我想知道我的这种看法有多少是正确的。

回答

2

dispatch_sync和dispatch_async之间的区别与windows API中的sendmessage和postmessage类似。 dispatch_sync 提交一个块对象以便在调度队列上执行并等待该块完成。 dispatch_async 在调度队列中提交异步执行块并立即返回。

目标队列确定该块是相对于提交给同一队列的其他块而被串行调用还是同时调用。独立的串行队列相对于彼此同时处理。

在发布问题之前,您应该先仔细阅读文档。