[iOS]GCD Dispatch系列

dispatch_sync

  • 同步执行,直到执行的任务完成才返回
  • 目标队列:串行队列
    在当前线程执行任务,顺序执行
  • 目标队列:并发队列
    新建线程执行任务,顺序执行
  • 目标队列:主线程队列
    在主线程执行任务,顺序执行
  • 在当前线程调用且目标队列为当前队列时,形成死锁
  • 相应的block不会被copy
  • 目标队列不会被系统retain
  • 在尽可能的情况下,block将被优化运行在当前线程。

dispatch_barrier_sync

  • 同步执行,直到执行的任务完成才返回
  • 目标队列:串行队列
    当前线程执行任务,顺序执行
  • 目标队列:并发队列
    当前线程执行任务,顺序执行
  • 目标队列:主线程队列
    在主线程执行任务,顺序执行
  • 在当前线程调用且目标队列为当前队列时,形成死锁
  • 相应的block不会被copy
  • 目标队列不会被系统retain

  • 在尽可能的情况下,barrier block将被优化运行在当前线程。
  • 当barrier block到达自定义并发队列的顶部,它不会立刻执行,相反需要等到当前执行block完成,然后barrier block自动运行。在barrier block之后的block必须等到barrier block执行完毕才执行,形成一个栅栏。
    因此可以用来等待多个block任务完成的时机。
  • 必须由 dispatch_queue_create创建自定义的并发队列。如果不是由该函数创建的并发队列,而是串行队列(主队列)或全局并发队列,其行为等同 dispatch_sync,失去栅栏的作用。

dispatch_async

  • 异步执行,立刻返回
  • 目标队列:串行队列,顺序执行
    新建线程执行任务
  • 目标队列:并发队列,并行执行
    新建线程执行任务
  • 目标队列:主线程队列
    在主线程执行任务

  • 相应的block会被copy
  • 目标队列被系统retain直到block执行完毕

dispatch_barrier_async

  • 异步执行,立刻返回
  • 目标队列:串行队列,顺序执行
    新建线程执行任务
  • 目标队列:并发队列,并行执行
    新建线程执行任务
  • 目标队列:主线程队列
    在主线程执行任务

  • 相应的block会被copy

  • 目标队列被系统retain直到block执行完毕

  • 当barrier block到达自定义并发队列的顶部,它不会立刻执行,相反需要等到当前执行block完成,然后barrier block自动运行。在barrier block之后的block必须等到barrier block执行完毕才执行,形成一个栅栏。
    因此可以用来等待多个block任务完成的时机。

  • 必须由 dispatch_queue_create创建自定义的并发队列。如果不是由该函数创建的并发队列,而是串行队列(主队列)或全局并发队列,其行为等同 dispatch_async,失去栅栏的作用。

dispatch_group_async

发送一个block任务到派发队列并且关联到一个派发group

  • 异步调用,立刻返回
  • group将被系统retain直到block执行完毕
  • queue将被系统retain直到block执行完毕
  • block将被copy到堆上
  • 采用dispatch_group_notify可以用来等待一组block任务执行完毕。

dispatch_group_notify

将一个block对象计划到派发队列,当所有已经提交的block任务对象执行完毕后执行该block。

  • 用来实现一系列任务的完成通知功能。
  • 如果group为nil,该block将直接运行
  • group可以通过dispatch_release释放或者继续被重用。
  • DispatchGroup对象也可以实现相同功能。

猜你喜欢

转载自blog.csdn.net/annkie/article/details/82782155