4.多线程 串行、并行、同步、异步、死锁
多线程的前提是在同一队列。队列负责管理多个任务,队列拥有一个线程池,线程池里有一个或者多个线程,按要求将每个任务调度到某一个线程执行。
串行队列,后一个任务等待前一个任务结束后在执行,按添加顺序执行。
并行队列,后一个任务不会等待前一个任务,不等前一个任务完成就会分配新的任务。
创建队列dispatch_queue_t,串行DISPATCH_QUEUE_SERIAL,并行DISPATCH_QUEUE_CONCURRENT。
同步dispatch_sync,不会创建新的线程,会阻塞当前的线程并在该线程中执行任务。
异步dispatch_async,不会阻塞当前线程,会在恰当的时机在当前线程或者另开线程执行任务,开始任务和完成任务时间是不确定的。
死锁,向同一个串行队列添加同步任务,因为同步,进行中的任务等待添加任务完成,因为串行,添加的任务等待上一个任务完成,因为互相等待形成死循环。
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_sync(dispatch_get_main_queue(), ^{
});
}