在iOS GCD中,几个概念, 提交的 task block 遵循 FIFO 原则。
- 串行 vs 并行
串行:按添加顺序来执行完成任务 DISPATCH_QUEUE_SERIAL
并行,多个任务同时执行 DISPATCH_QUEUE_CONCURRENT
- 同步 vs 异步
同步:在当前线程中,执行一段提交到其他线程的代码,等待执行完毕之后,继续往下执行
dispatch_sync, dispatch_barrier_sync
异步:将 操作任务Task,提交对其他线程队列之后,继续往下执行, Task 什么时候执行,有系统调度。dispatch_async, dispatch_barrier_async
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"1"); // 任务1
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2"); // 任务2
});
NSLog(@"3"); // 任务3
});
NSLog(@"4"); // 任务4
// while (1) { }
NSLog(@"5"); // 任务5
输出结果 45,必然在2,3 之前,4 在5之前,可能是 145,415,451 这几个情况
网友评论