- 1.主线程队列是串行的、全局队列是并发的。
- 2.请求分同步和异步,同步会阻塞当前线程,异步不会。
- 3.如果队列是串行的,即使是异步,也是一个一个执行,按照添加的顺序执行。
- 4.如果队列是异步的,同步请求也会使队列一个一个执行,因为同步请求会阻塞当前线程,如果是异步的会并行执行,可以使用优先级来设置执行的优先顺序。
- dispatch_sync 同步请求
- //异步请求
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- // 耗时的操作
- dispatch_async(dispatch_get_main_queue(), ^{
- // 更新界面
- });
- });
- 5.dispatch_barrier_sync(ConCurrentqueue,{})前面的任务并发完成后才会执行这个任务,而这个任务后面的需这个任务执行完之后才会并发执行。
- dispatch_barrier_async前面队列中的任务并发执行完之后会执行这个任务,这个队列后面的任务需要这个执行完了之后才会触发,和上面的不同是他是异步的不会等待,如果这个任务下面有别的代码不在队列中的会有可能先执行,而同步的不会必须等这个任务执行完之后才会执行。
- 6.线程死锁:主要是在串行队列中使用了同步任务,会阻塞当前线程把把任务添加到队尾,等待别的任务执行,而别的任务又需要此任务执行后才能执行就导致死锁,如果当前线程还有别的任务需要小心使用。
-