iOS笔记-多线程

同步函数&串行队列
  • 不会开启线程,在当前线程执行任务
  • 任务串行执行,任务一个接着一个
  • 会产生堵塞(死锁,崩溃)

主队列(串行队列)加入同步任务堵塞的原因:

NSLog(@"aaa");
dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"bbb");
});
NSLog(@"ccc");
  • 任务A内容为执行B任务
  • 串行队列,所以B任务是在A任务之后加入队列,需要等待任务A执行完毕
  • 同步任务,A任务的内容B执行完成,A任务才算完成
  • 于是,因为串行,B等待A,因为同步,A等待B,互相等待产生死锁
同步函数&并发队列
  • 不会开启线程,在当前线程执行任务
  • 任务一个接着一个
异步函数&串行队列
  • 开启新线程
  • 任务一个接着一个
异步函数&并发队列
  • 开启线程,在当前线程执行任务
  • 任务异步执行,没有顺序,CPU调度有关
  • 同步函数(sync)不开启子线程
  • 异步函数(async)开启子线程
  • 串行队列(serial_queue)顺序执行
  • 并行队列(concurrent_queue)任务顺序不确定

你可能感兴趣的:(iOS笔记-多线程)