iOS开发 多线程GCD总结_三

服务器

  GCD任务和队列不同组合方式:

  GCD虽然有两种任务执行方式(同步执行/异步执行),两种队列(串行队列/并发队列),但是却有四种不同的组合方式:

  1、异步执行+并发队列

  可以开启多个线程,任务交替(同时)执行。

  2、同步执行+并发队列

  在当前线程中执行任务,不会开启新线程,执行完一个任务,再执行下一个任务。

  3、异步执行+串行队列

  会开启新线程,但是因为任务是串行的,执行完一个任务,再执行下一个任务。

  4、同步执行+串行队列

  不会开启新线程,在当前线程执行任务。任务是串行的,执行完一个任务,再执行下一个任务。

  实际上还有两种默认的队列:全局并发队列、主队列;所以又多了两种组合方式:

  5、异步执行+主队列

  只在主线程中执行任务,执行完一个任务,再执行下一个任务。任务都是在当前线程(主线程)中执行的,并没有开启新的线程(虽然 异步执行 具备开启线程的能力,但因为是主队列,所以所有任务都在主线程中);任务是按顺序执行的(因为主队列是 串行队列,每次只有一个任务被执行,任务一个接一个按顺序执行);异步执行不会做任何等待。

  6、同步执行+主队列

  在不同线程中调用结果也是不一样,在主线程中调用会发生死锁问题,互相等待卡住不可行;而在其他线程中调用则不会,其它线程中不会开启新线程,执行完一个任务,再执行下一个任务。

  GCD任务和队列不同组合方式的区别:如图

GCD任务和队列不同组合方式的区别

  GCD不同队列+不同任务组合,以及队列中嵌套队列使用区别:如图

GCD不同队列+不同任务组合,以及队列中嵌套队列使用区别

标签: 服务器