同步函数&串行队列
- 不会开启线程,在当前线程执行任务
- 任务串行执行,任务一个接着一个
- 会产生堵塞(死锁,崩溃)
主队列(串行队列)加入同步任务堵塞的原因:
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)任务顺序不确定